当前位置: 代码迷 >> python >> 在目录列表中列出理解过滤文件
  详细解决方案

在目录列表中列出理解过滤文件

热度:97   发布时间:2023-06-13 15:19:11.0

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列表,而不仅仅是一个目录?

问题归结为:如何将列表列表变成一个列表? 由于.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')]
  相关解决方案