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

如何让合并CSV的Python程序遍历目录下多个子文件夹?

解决glob遍历子文件夹时的参数错误问题

错误原因

glob.glob()仅接受单个字符串参数(即完整的文件匹配路径),你写的glob.glob(i, "*.csv")传入了两个独立参数,违反了函数的参数要求,因此触发TypeError。而单文件夹场景下,你用os.path.join(path, "*.csv")把路径和文件名模式合并成了一个完整字符串,符合glob.glob()的参数规则,所以能正常运行。

修正后的完整代码

import os
import glob
import pandas as pd
import matplotlib.pyplot as plt

# 根目录(对应你的results文件夹)
root_dir = 'results'

# 遍历results下的所有子文件夹
for subdir_name in os.listdir(root_dir):
    subdir_path = os.path.join(root_dir, subdir_name)
    # 跳过非文件夹项
    if not os.path.isdir(subdir_path):
        continue
    
    # 正确获取当前子文件夹内的所有CSV文件
    csv_files = glob.glob(os.path.join(subdir_path, "*.csv"))
    # 跳过无CSV文件的子文件夹
    if len(csv_files) == 0:
        print(f"跳过子文件夹 {subdir_name}:未找到CSV文件")
        continue
    
    # 合并当前子文件夹内的CSV
    merged_data = pd.concat([pd.read_csv(csv) for csv in csv_files], ignore_index=True)
    merged_csv_path = os.path.join(subdir_path, f"{subdir_name}_merged.csv")
    merged_data.to_csv(merged_csv_path, index=False)
    print(f"已生成合并文件:{merged_csv_path}")
    
    # 生成并保存直方图(示例以cell_count列为例,可根据你的数据修改列名)
    plt.figure(figsize=(10, 6))
    merged_data['cell_count'].hist(bins=20, edgecolor='black')
    plt.title(f"{subdir_name} 细胞数据直方图")
    plt.xlabel("细胞指标值")
    plt.ylabel("频次")
    hist_save_path = os.path.join(subdir_path, f"{subdir_name}_histogram.png")
    plt.savefig(hist_save_path)
    plt.close()
    print(f"已生成直方图:{hist_save_path}")

关键注意事项

  • 始终用os.path.join()拼接路径:它会自动适配不同操作系统的路径分隔符(Windows用\,Linux/macOS用/),避免路径格式错误
  • 遍历子文件夹时要先判断是否为文件夹:避免处理根目录下的非文件夹文件
  • 增加空文件夹判断:防止因子文件夹内无CSV文件导致后续合并代码报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:38:09