Python递归遍历嵌套文件夹文件重复统计问题排查
问题原因及修复方案
核心错误:重复遍历目录
你写的Files_Dirs函数里,os.walk本身就会自动递归遍历所有子目录,但你又在循环里手动对每个子目录调用Files_Dirs递归,导致同一个文件被多次添加到列表中。比如:
- 第一次调用
Files_Dirs处理根目录时,os.walk已经会遍历根目录下所有子文件夹和文件,把所有文件加入列表; - 但你又对每个子目录再次调用
Files_Dirs,而这个子目录的os.walk又会重新遍历自己及其子目录,把同样的文件再添加一遍,最终导致文件被重复统计。
修复后的代码
直接去掉手动递归的部分,只用os.walk即可完成遍历,同时优化路径拼接保证跨平台兼容:
#!/usr/bin/env python # Python3 program to list files in nested folders import os def Files_Dirs(rootdir): filelist = [] for root, dirs, files in os.walk(rootdir): for file in files: # 用os.path.join自动适配Windows/Linux路径分隔符 filelist.append(os.path.join(root, file)) return filelist rootdir = 'D:/my/images' # 如果是Linux环境,直接改成类似'/home/user/images'即可 filelist = Files_Dirs(rootdir) print("Number of file found was ", len(filelist)) # 写入文件,用with语句自动关闭文件更安全 with open('c:/temp/filenamefixed.txt', 'w') as OutPrint: count = 0 for x in filelist: count += 1 OutPrint.write(x + '\n') print("Number of file iterated was ", count)
额外优化点
- 用
with语句管理文件,避免忘记关闭文件的问题; - 去掉了不必要的全局列表传递,函数内部初始化列表更清晰;
- 用
os.path.join替代硬编码的/,保证在Windows和Linux下都能正确生成路径; - 移除了调试用的print语句,保留关键统计输出。
内容的提问来源于stack exchange,提问作者RDK
相关产品推荐
相关产品推荐

