如何让合并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
相关产品推荐
相关产品推荐

