list comprehension过滤目录列表中的文件

时间:2017-02-13 17:35:45

标签: python

sel_dirs是用户提供的目录列表,可在其中搜索.xlsx文件:

results_excels = []
for each_dir in sel_dirs:
    for each_file in os.listdir(os.path.abspath(os.path.join(my_dir, each_dir))):
        if each_file.endswith("_Results.xlsx"):
                results_excels.append(os.path.abspath(os.path.join(my_dir, each_dir, each_file)))

在列表提供的目录中收集所有结果Excel文件列表的最简洁方法是什么,可能包含列表推导,可以在列表目录中进行评估,以及不只是在一个目录上?

results_excels = [filename for filename in os.listdir(LIST) if filename.endswith("_Results.xlsx")]

哪里LIST是sel_dirs目录列表而不只是一个目录?

1 个答案:

答案 0 :(得分:0)

问题归结为:如何将列表列表放入一个列表?由于.listdir()会返回一个列表,因此无法进行简单的理解。

见面itertools.chain。它选择一个迭代列表并按顺序迭代它们,这是理解所需要的。 唯一的细节是listdir的值需要在dir的路径前面加上,否则它会丢失。

import itertools

files_in_dir = lambda d: [os.path.join(d, fname) for fname in os.listdir(d)] 
file_lists = [files_in_dir(d) for d in sel_dirs]
all_files = itertools.chain(*file_lists)
excel_files = [f for f in all_files if f.endswith('.xlsx')]