使用python从多个文件名中提取子集

时间:2016-05-12 05:26:58

标签: python

我在目录中有很多文件,名称如下:

'data_2000151_avg.txt','data_2000251_avg.txt','data_2003051_avg.txt'......

假设其中一个被称为fname。我想从每个中提取一个子集,如下所示:

fname.split('_')[1][:4]

这将得到2000.我想从目录中的所有文件中收集这些文件并创建一个唯一的列表。我该怎么做?

3 个答案:

答案 0 :(得分:1)

你应该使用os。

import os
dirname = 'PathToFile'
myuniquelist = []
for d in os.listdir(dirname):
    if d.startswith('fname'):
        myuniquelist.append(d.split('_')[1][:4])
编辑:刚看到你想要一套的评论。在for循环之后添加这一行。

myuniquelist = list(set(myuniquelist))

答案 1 :(得分:0)

要列出目录中的文件,您可以使用os.listdir()。要生成唯一值列表,最合适的是set comprehension

import os
data = {f.split('_')[1][:4] for f in os.listdir(dir_path)}
list(data) #if you really need a list

答案 2 :(得分:0)

如果唯一列表表示唯一值列表,则glob(如果文件夹包含与所需名称格式不匹配的文件)和set的组合应该可以解决问题:

from glob import glob

uniques = {fname.split('_')[1][:4] for fname in glob('data_*_avg.txt')}
# In case you really do want a list
unique_list = list(uniques)

这假定文件位于当前工作目录中。根据需要将路径附加到glob('path/to/data_*_avg.txt')