【问题标题】:How to select files with numbered extensions from a folder?如何从文件夹中选择带有编号扩展名的文件?
【发布时间】:2019-01-26 18:49:12
【问题描述】:

我正在尝试为一个项目构建我自己的数据集。因此,我需要选择已从另一个程序导出并带有编号扩展名的文件:

exported_file_1_aaa.001
exported_file_2_aaa.002
exported_file_3_aaa.003
...
exported_file_5_zzz.925
...and so on.

我知道如何选择具有特定扩展名的文件,例如'.txt' 来自文件夹并将其附加到列表或字典中。有没有办法用'.nnn'解决这个问题

ext = '.nnn'
all_files = [i for i in os.listdir(dir) if os.path.splitext(i)[1] == ext]
for f in all_files:
    ...

【问题讨论】:

    标签: python listdir


    【解决方案1】:

    您可以混合使用 shell globbing (glob) 和正则表达式 (re) 的功能。

    使用glob可以得到以数字结尾的文件,这样我们就可以得到有限数量的文件给re做最后的检查:

    glob.iglob('exported_file_*.*[0-9]')
    

    然后我们可以用正则表达式精确匹配文件:

    \.\d+$
    

    这将匹配最后一个 . 之后以数字结尾的文件名。

    放在一起:

    import glob
    import re
    [file for file in glob.iglob('exported_file_*.*[0-9]') if re.search(r'\.\d+$', file)]
    

    Shell globbing 不如 re 灵活,否则我们可以单独使用 glob

    此外,如果您确定所有文件都以一定数量的数字结尾,那么单独使用 glob 即可,例如对于最后一个 . 后以 3 位数结尾的文件:

    glob.iglob('exported_file_*.[0-9][0-9][0-9]')
    

    【讨论】:

    • 非常感谢您的建议!我是 python 新手(你可能已经猜到了),我真的很感谢这个社区!它适用于:[glob.iglob 中的文件文件('.[0-9][0-9][0-9]')] [glob.iglob 中的文件文件(' .[0-9][0-9][0-9]') if re.search(r'\.\+$')] 给了我错误消息“search() missing 1 required positional argument: 'string '" 所以我想如果 re.search(r '\.\+$', 文件)],对吗?
    【解决方案2】:

    如果不关心扩展的长度,可以使用isdigit方法:

    all_files = [i for i in os.listdir(dir) if os.path.splitext(i)[1].isdigit()]
    for f in all_files: 
        ....
    

    【讨论】:

      【解决方案3】:

      您可以使用glob 模块。

      import glob
      
      my_dir = "mydir"
      
      all_files = [fn for fn in glob.glob(f"{my_dir}/*.[0-9][0-9][0-9]")]
      

      【讨论】:

        猜你喜欢
        • 2015-10-11
        • 1970-01-01
        • 1970-01-01
        • 2017-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多