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

使用os.listdir()处理文件夹文件仅保存最后一个结果的问题求助

问题原因分析
  • 保存逻辑位置错误:你把文件保存的代码放在了for循环外面,循环跑完207个文件夹后,只会用最后一次循环的directory和处理后的df执行保存,前面206个文件夹的处理结果都被覆盖,根本没存下来。
  • 冗余的CSV读取:try块里已经读取了一次CSV,后面又重复读了一遍,纯粹浪费资源,完全可以删掉重复的那行。
修复后的代码
def ind_quant_table_full(repository_path, ionization_mode, file_extention, data_process_origin, use_ion_identity, min_score_final, min_ConfidenceScore, min_ZodiacScore):
    
    path = os.path.normpath(repository_path)
    # 只保留目录下的文件夹,避免文件进入循环
    samples_dir = [d for d in os.listdir(path) if os.path.isdir(os.path.join(path, d))]
    # 提前创建结果文件夹,不用循环里重复创建
    pathout_folder = os.path.join(path, 'results/')
    os.makedirs(pathout_folder, exist_ok=True)

    for directory in tqdm(samples_dir):
        quant_path = os.path.join(path, directory, ionization_mode, directory + '_features_quant_' + ionization_mode + '.csv')

        try:
            df = pd.read_csv(quant_path, sep=',')
        except FileNotFoundError:
            continue
        except NotADirectoryError:
            continue
        # 捕获其他未知错误,方便排查
        except Exception as e:
            print(f"处理目录 {directory} 时出错: {str(e)}")
            continue

        # 这里放你的数据处理逻辑
        [do something to df]

        # 把保存代码缩进,放到循环内部,处理完一个就存一个
        pathout = os.path.join(pathout_folder, f"{directory}_{ionization_mode}_quant_annotations.tsv")
        df.to_csv(pathout, sep='\t')
    
    print(f"结果已保存至: {pathout_folder}")
额外优化点
  • 过滤文件夹:原代码的samples_dir会包含目录下的所有文件和文件夹,加个判断只保留文件夹,避免无效循环。
  • 统一异常捕获:新增通用异常捕获,能帮你快速定位某个文件夹处理失败的原因。
  • 提前创建结果目录:把创建文件夹的代码移到循环外面,不用每次循环都执行一次判断,提升效率。

内容的提问来源于stack exchange,提问作者Luis Manuel Quiros guerrero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:40:26