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

如何合并主文件夹下多层子目录中的多个CSV文件?

问题分析与解决方案

原代码核心问题

  1. 函数提前返回:list_files函数中return r语句在合并逻辑之前,导致后续合并CSV的代码完全不会执行。
  2. 变量定义顺序错误:调用list_files(data_dir)时,data_dir变量还未定义,会触发NameError。
  3. 未定义变量:最后一段代码使用了不存在的chat_files变量,应替换为files。
  4. 冗余操作:重复创建combined_df和df,且os.chdir属于不必要操作,直接使用绝对路径即可。

修正后的代码

以下代码会精准定位主文件夹下第三层子目录中的所有CSV文件,并合并为单个文件:

import pandas as pd
import os
import glob

# 定义主目录路径
data_dir = r'C:\Users\user\Downloads\top_folder'

# 获取第三层子目录中的所有CSV文件(路径格式:top_folder/*/*/*.csv)
csv_files = glob.glob(os.path.join(data_dir, "*", "*", "*.csv"))

# 合并并保存文件
if csv_files:
    # 合并所有CSV,ignore_index=True重置索引避免重复
    combined_df = pd.concat([pd.read_csv(file) for file in csv_files], ignore_index=True)
    # 将合并后的文件保存到主目录下
    output_path = os.path.join(data_dir, "merged_all.csv")
    combined_df.to_csv(output_path, index=False)
    print(f"已成功合并{len(csv_files)}个CSV文件,结果保存至:{output_path}")
else:
    print("未找到位于第三层子目录中的CSV文件")

可选:用os.walk精确控制目录深度

如果需要更严格地限制仅第三层子目录(避免匹配更深层级的文件),可以用os.walk判断目录深度:

import pandas as pd
import os

data_dir = r'C:\Users\user\Downloads\top_folder'
csv_files = []
# 计算主目录的层级深度
base_depth = len(os.path.normpath(data_dir).split(os.sep))

for root, dirs, files in os.walk(data_dir):
    # 计算当前目录相对于主目录的深度
    current_depth = len(os.path.normpath(root).split(os.sep))
    # 仅处理第三层子目录(主目录为第0层,第三层即base_depth + 3)
    if current_depth == base_depth + 3:
        for file in files:
            if file.endswith(".csv"):
                csv_files.append(os.path.join(root, file))

# 合并逻辑同前
if csv_files:
    combined_df = pd.concat([pd.read_csv(file) for file in csv_files], ignore_index=True)
    output_path = os.path.join(data_dir, "merged_all.csv")
    combined_df.to_csv(output_path, index=False)
    print(f"已成功合并{len(csv_files)}个CSV文件,结果保存至:{output_path}")
else:
    print("未找到位于第三层子目录中的CSV文件")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:31:05