You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:07:08