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

遍历子目录筛选特定CSV并合并:代码问题排查求助

代码问题排查&优化方案

问题出在这几个地方

  1. 循环嵌套完全混乱:写了好几层没必要的for循环(比如for f in files、for ff in filteredResults这类),不仅重复执行过滤逻辑拖慢速度,还把代码逻辑搅得一团糟。
  2. 初始化位置错误:
    • a = pd.DataFrame() 放在内层循环里,每次循环都会重置为空表,之前累积的数据直接清零
    • appended = [] 也在内层循环,每次处理文件都会清空列表,根本存不住所有文件的数据
  3. 合并操作无效:a = pd.concat([data]) 每次只把当前单个文件合并进去,完全没用到你append的列表,最后自然只剩最后一个文件的数据。
  4. 过滤逻辑重复低效:反复多次过滤文件列表,其实一次就能把所有条件都加进去,没必要来回遍历。

修复后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:55:15