Python os.walk遍历目录如何输出匹配文件夹的列表而非逐行打印
需求说明
需要筛选目标目录下名称包含fg-的子文件夹,最终输出标准Python列表格式,而非逐行打印单个文件夹名称。
目标目录/home/test_directory结构如下:
/home/test_directory fg-2022-07-12 fg-2022-07-11 ag-2022-07-12
原有实现代码逻辑为遍历目录,匹配到符合规则的文件夹后逐行打印,代码如下:
import os SRC = '/home/test_directory' for root_dir_path, sub_dirs, files in os.walk(SRC): for folders in sub_dirs: if "fg-" in folders: print(folders)
该代码运行后逐行输出结果:
fg-2022-07-08 fg-2022-07-07
期望得到的标准列表格式输出:
['fg-2022-07-08', 'fg-2022-07-07']
实现方法
优先选择遍历过程中直接生成列表的方案,逻辑更简洁,不需要做额外的打印结果转换:
方案1:直接收集匹配结果生成列表(推荐)
初始化空列表存储匹配到的文件夹名,遍历过程中把符合条件的文件夹名追加到列表中,遍历完成后直接打印列表即可得到标准格式输出。
import os SRC = '/home/test_directory' fg_folders = [] for root_dir_path, sub_dirs, files in os.walk(SRC): for folder in sub_dirs: if "fg-" in folder: fg_folders.append(folder) print(fg_folders)
运行后输出结果:
['fg-2022-07-08', 'fg-2022-07-07']
补充提示:
os.walk默认会递归遍历目标路径下所有层级的子目录,如果你只需要筛选/home/test_directory下的一级子文件夹、不需要检索深层目录,可以在第一层for循环处理完sub_dirs后添加break终止递归,避免把深层目录中符合命名规则的文件夹也收集到结果里。
方案2:逐行输出结果转列表(备选)
如果你已经拿到了逐行打印的字符串结果,也可以通过字符串分割的方式转成列表,该方案需要额外处理打印内容,不如方案1直接,仅做备选参考:
# 逐行打印得到的原始字符串 print_result = """fg-2022-07-08 fg-2022-07-07 """ fg_list = [item for item in print_result.split('\n') if item.strip()] print(fg_list)
内容的提问来源于stack exchange,提问作者Bot75
相关产品推荐
相关产品推荐

