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

Python os.walk脚本仅统计最后一个子文件夹文件问题求助

文件夹文件统计脚本修复方案

问题根源

你当前脚本只统计最后一个子文件夹,核心原因是每次遍历文件夹时没有保留之前的统计结果,而是重复覆盖了同一个计数器变量,导致最终只剩最后一次循环的数据。

修复方案:正确使用os.walk

os.walk会递归遍历目标目录的所有子文件夹,每次循环返回当前文件夹路径、子文件夹列表、文件列表。我们只需要用一个字典存储每个文件夹的统计数据,避免覆盖即可:

import os

def count_folder_files(root_dir):
    # 存储每个文件夹的统计信息:键为文件夹路径,值为统计字典
    folder_stats = {}
    for dirpath, _, filenames in os.walk(root_dir):
        total = len(filenames)
        ext_counts = {}
        # 统计当前文件夹的扩展名
        for name in filenames:
            _, ext = os.path.splitext(name)
            # 统一转小写,避免.TXT和.txt被视为不同扩展名
            ext = ext.lower()
            ext_counts[ext] = ext_counts.get(ext, 0) + 1
        # 将当前文件夹的统计结果存入字典
        folder_stats[dirpath] = {
            "total_files": total,
            "extension_counts": ext_counts
        }
    return folder_stats

# 调用示例
target_dir = "/你的目标根目录路径"
results = count_folder_files(target_dir)
# 打印统计结果
for folder, stats in results.items():
    print(f"文件夹:{folder}")
    print(f"总文件数:{stats['total_files']}")
    print("扩展名分布:")
    for ext, cnt in stats['extension_counts'].items():
        print(f"  {ext}: {cnt}")
    print("-" * 40)

替代实现:使用pathlib(更简洁的现代写法)

Python 3.4+ 推荐使用pathlib模块,它提供了面向对象的文件系统操作,代码更易读:

from pathlib import Path

def count_folder_files_pathlib(root_dir):
    folder_stats = {}
    root_path = Path(root_dir)
    # 递归遍历所有子目录(包括根目录)
    for dir_path in root_path.rglob("*"):
        if not dir_path.is_dir():
            continue
        # 获取当前目录下的所有文件
        files = [f for f in dir_path.iterdir() if f.is_file()]
        total = len(files)
        ext_counts = {}
        for file in files:
            ext = file.suffix.lower()
            ext_counts[ext] = ext_counts.get(ext, 0) + 1
        folder_stats[str(dir_path)] = {
            "total_files": total,
            "extension_counts": ext_counts
        }
    return folder_stats

# 调用示例
target_dir = "/你的目标根目录路径"
results = count_folder_files_pathlib(target_dir)
# 打印结果
for folder, stats in results.items():
    print(f"文件夹:{folder}")
    print(f"总文件数:{stats['total_files']}")
    print("扩展名分布:")
    for ext, cnt in stats['extension_counts'].items():
        print(f"  {ext}: {cnt}")
    print("-" * 40)

内容的提问来源于stack exchange,提问作者Gabe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:35:44