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

Pandas存储文件夹大小统计结果时每行索引均为0问题求解

问题原因

两个核心问题导致你遇到的现象:

  • 你在每次调用show_folders_by_size时,都会在函数内部重新初始化空的path、calcul_size列表,并且新建一个独立的DataFrame,每个DataFrame里只存入当前遍历到的1个文件夹的数据,所以每个表都只有1行,默认索引自然都是0。且函数执行结束后内部生成的DataFrame会被直接回收,根本没有实现多文件夹结果的汇总。
  • 附带逻辑bug:你当前的大小计算逻辑只统计目标文件夹下的直接子项大小,没有递归遍历子文件夹,统计出的目录大小是不准确的;同时主循环里os.walk(root)的参数和循环接收的根目录变量重名,容易引发逻辑错误。
修复方法

核心思路是把「单文件夹统计」和「结果汇总建表」两个逻辑拆分:

  1. 调整统计函数,让它只负责计算单个文件夹的大小、返回单条统计数据,不在函数内部创建DataFrame
  2. 在主程序外层初始化统一的结果存储列表,遍历所有目标文件夹时把每条统计结果追加到这个列表中
  3. 等所有文件夹遍历完成后,用汇总好的列表一次性创建DataFrame,即可得到包含所有结果、索引连续的完整表格
  4. 可选:补全文件夹大小的递归统计逻辑,修正主循环的变量命名冲突

修复后的可运行代码如下:

import os
import time
import pandas as pd

# 单文件夹大小计算函数,支持递归统计子文件
def get_folder_size(folder_path):
    total_size = 0
    for item in os.scandir(folder_path):
        if item.is_file():
            total_size += item.stat().st_size
        elif item.is_dir():
            total_size += get_folder_size(item.path)
    # 单位转换为Mb
    return total_size // 1048576

if __name__ == "__main__":
    # 替换为你实际要扫描的根目录,注意不要和os.walk的循环变量重名
    SCAN_ROOT = r"C:\Users\mbarrech\Desktop\dossier_test"
    expire_threshold = time.time() - (3 * 2628000)
    # 统一存储所有结果的列表
    all_dev_folder = []

    for current_root, dirs, files in os.walk(SCAN_ROOT):
        for dir_name in dirs:
            dir_full_path = os.path.join(current_root, dir_name)
            if "back" in dir_name:
                # 保留你原有的过期文件清理逻辑
                remove_files_by_modification_time(dir_full_path)
            elif "dev" in dir_name:
                size_mb = get_folder_size(dir_full_path)
                all_dev_folder.append({
                    "chemin du dossier": dir_full_path,
                    "taille par Mb": f"{size_mb} Mb"
                })

    # 所有数据收集完成后统一生成DataFrame
    df_dev_size = pd.DataFrame(all_dev_folder)
    # 打印验证结果
    print(df_dev_size)

运行后生成的df_dev_size会包含所有匹配到的dev文件夹信息,索引自动从0开始连续递增,不会再出现单条数据单独成表、索引全为0的问题。
如果你不需要统计子文件夹的大小,只需要计算目标文件夹下直接子项的大小,把get_folder_size里递归调用的部分删除即可,核心的结果汇总逻辑不需要改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:36:15