【问题标题】:How to extract specific digits after underscore from filename in python如何从python中的文件名中提取下划线后的特定数字
【发布时间】:2013-05-24 20:39:01
【问题描述】:

我有许多文件名,例如:

/home/abc/xyz/12345_993456_pqr
/home/abc/xyz/12345_883456_pqr
/home/abc/xyz/12345_773456_pqr

我需要在第一个下划线之后提取前两位数字,即998877。这不是99/88/77 总是......只是一个例子......我试过了:

re.search()  

isdigit()

但它不起作用。有人可以帮忙吗?

【问题讨论】:

    标签: python regex python-2.7 python-3.x filenames


    【解决方案1】:

    一步一步:

    >>> import os
    >>> os.path.basename('/home/abc/xyz/12345_993456_pqr')
    '12345_993456_pqr'
    
    >>> os.path.basename('/home/abc/xyz/12345_993456_pqr').split('_')
    ['12345', '993456', 'pqr']
    
    >>> os.path.basename('/home/abc/xyz/12345_993456_pqr').split('_')[1]
    '993456'
    
    >>> os.path.basename('/home/abc/xyz/12345_993456_pqr').split('_')[1][:2]
    '99'
    

    【讨论】:

    • 你能解释一下吗?我是 python 新手……什么是“os.path.basename”?我需要将提取的数字存储在变量中...
    • 添加了中间步骤的输出。
    • os.path.basename 在提供路径(即不仅仅是文件名)时给出文件名。
    • @Mike 非常感谢!如果文件名存储在变量中,您能否建议该怎么做让我们说'path = /home/abc/xyz/12345_993456_pqr'谢谢!
    【解决方案2】:

    好的,这很棘手,但试试这个:

    import os, re
    reg_exp = re.compile('_\d\d')
    digits = [j[1:] for j in sum([reg_exp.findall(os.path.basename(i))[:1] 
                                                  for i in filenames], [])]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2013-12-06
      • 2020-04-26
      相关资源
      最近更新 更多