遍历子目录筛选特定CSV并合并:代码问题排查求助
代码问题排查&优化方案
问题出在这几个地方
- 循环嵌套完全混乱:写了好几层没必要的
for循环(比如for f in files、for ff in filteredResults这类),不仅重复执行过滤逻辑拖慢速度,还把代码逻辑搅得一团糟。 - 初始化位置错误:
a = pd.DataFrame()放在内层循环里,每次循环都会重置为空表,之前累积的数据直接清零appended = []也在内层循环,每次处理文件都会清空列表,根本存不住所有文件的数据
- 合并操作无效:
a = pd.concat([data])每次只把当前单个文件合并进去,完全没用到你append的列表,最后自然只剩最后一个文件的数据。 - 过滤逻辑重复低效:反复多次过滤文件列表,其实一次就能把所有条件都加进去,没必要来回遍历。
修复后的代码
import os import pandas as pd path = "你的根目录路径" all_data = [] # 全局初始化,专门用来累积所有文件的数据 # 遍历所有子文件夹 for root, _, files in os.walk(path): # 一次完成所有条件筛选:含NBack、后缀为csv、不含X、不是pdf target_files = [ f for f in files if 'NBack' in f and f.endswith('.csv') and 'X' not in f and not f.endswith('.pdf') ] # 处理每个符合条件的文件 for filename in target_files: file_full_path = os.path.join(root, filename) df = pd.read_csv(file_full_path) # 拆分文件名添加列 name_parts = filename.split("_") df['Run'] = name_parts[3] df['IDcheck'] = name_parts[0] all_data.append(df) # 合并所有数据为一个大文件 final_df = pd.concat(all_data, ignore_index=True) # 保存结果 final_df.to_csv("合并后的大文件.csv", index=False)
优化说明
- 单次过滤高效筛选:把所有筛选条件整合到一个列表推导式里,只遍历一次文件列表,大幅提升运行速度
- 全局累积数据:
all_data放在循环外部,确保所有文件的数据都能被收集,不会被中途清空 - 正确合并数据:最后一次性合并所有累积的DataFrame,
ignore_index=True用来重置索引,避免不同文件的索引重复 - 移除冗余循环:删掉所有不必要的嵌套循环,代码更清爽,运行效率更高
内容的提问来源于stack exchange,提问作者Ang
相关产品推荐
相关产品推荐

