递归获取文件夹及子目录下所有文件全路径(排除子文件夹路径)
实现方案
问题原因
你原有代码只提取了os.walk返回的第三个元素(当前目录下的文件名列表),没有和第一个元素(当前目录的完整路径)拼接,因此只能输出纯文件名。
实现1:基于os.walk的简洁实现
直接利用os.walk自带的递归能力,拼接路径即可:
import os def get_all_filePATHs(folderPATH): file_paths = [] for root, dirs, files in os.walk(folderPATH): for file in files: # 拼接当前目录路径和文件名,得到完整路径 full_path = os.path.join(root, file) file_paths.append(full_path) return file_paths folderPATH = r'C:\Users\Arman\Desktop\Cosmology\Articles' print(get_all_filePATHs(folderPATH))
实现2:手动实现递归逻辑(自定义递归遍历)
如果你需要自己写递归逻辑不依赖os.walk的封装,可以用如下实现,支持任意层级嵌套:
import os def get_all_filePATHs(folderPATH): file_paths = [] # 遍历当前目录下的所有条目 for entry in os.listdir(folderPATH): entry_full_path = os.path.join(folderPATH, entry) # 如果是文件,直接加入结果列表 if os.path.isfile(entry_full_path): file_paths.append(entry_full_path) # 如果是目录,递归遍历该目录,将结果合并到当前列表 elif os.path.isdir(entry_full_path): file_paths.extend(get_all_filePATHs(entry_full_path)) return file_paths folderPATH = r'C:\Users\Arman\Desktop\Cosmology\Articles' print(get_all_filePATHs(folderPATH))
注意事项
- 两种实现都只会返回文件的完整路径,不会返回子目录本身的路径
- 路径拼接统一用
os.path.join,可以自动适配Windows、Linux等不同操作系统的路径分隔符,兼容性更好
内容的提问来源于stack exchange,提问作者camarman
相关产品推荐
相关产品推荐

