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目录列表而不只是一个目录?
答案 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')]