使用os.listdir时如何获取子文件夹内的所有文件?
Python遍历目录下所有子目录文件的实现方法
os.listdir仅能返回目标目录的一级子元素,若需要递归获取所有层级子目录内的文件,可以用以下两种常用方案:
方案1:使用os.walk(兼容所有Python3版本)
os.walk会自动递归遍历所有子目录,每次迭代返回三个值:当前遍历的目录路径、当前目录下的子文件夹列表、当前目录下的文件列表,拼接路径即可得到完整的文件路径。
示例代码:
import os def get_all_files(root_path): file_list = [] for current_dir, _, files in os.walk(root_path): for file_name in files: # 拼接得到文件完整绝对路径 full_file_path = os.path.join(current_dir, file_name) file_list.append(full_file_path) return file_list # 调用测试 print(get_all_files("C:/Users/user/Desktop"))
如果只需要文件名不需要完整路径,直接把full_file_path替换成file_name即可,注意不同子目录下的同名文件会被重复返回。
方案2:使用pathlib(Python3.4及以上版本推荐)
pathlib是Python3.4新增的面向对象路径处理库,用递归glob方法可以非常简洁的实现需求:
示例代码:
from pathlib import Path def get_all_files(root_path): # rglob("*") 表示递归匹配所有路径,is_file()过滤掉文件夹,只保留文件 return [str(file) for file in Path(root_path).rglob("*") if file.is_file()] # 调用测试 print(get_all_files("C:/Users/user/Desktop"))
如果需要过滤特定格式的文件,比如只获取所有txt文件,把rglob("*")改成rglob("*.txt")即可。
内容的提问来源于stack exchange,提问作者Wyrden
相关产品推荐
相关产品推荐

