如何从文件夹中选择带有编号扩展名的文件?

时间:2019-01-26 18:49:12

标签: python listdir

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

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:
    ...

3 个答案:

答案 0 :(得分:2)

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

使用glob,您可以获取以数字结尾的文件,以便我们获得数量有限的文件,供re进行最终检查:

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

然后我们可以使用Regex模式精确匹配文件:

\.\d+$

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

放在一起:

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

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以使用glob模块。

import glob

my_dir = "mydir"

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