循环调用pandas.to_csv无法将文件保存至指定文件夹问题求助
问题排查与修复方案
你的代码执行无报错但未生成TXT文件,核心问题出在路径处理和文件匹配逻辑上,以下是具体问题分析和修复方案:
主要问题点
- 路径重复拼接:
os.walk(W_dir_path)返回的src已经是完整的文件夹路径(包含父文件夹和所有子文件夹),再用os.path.join(W_dir_path, subfolder)会生成重复的无效路径,导致后续切换目录操作失效却无报错。 - glob匹配规则错误:
glob.glob('/*.csv')是从系统根目录查找CSV文件,而非当前子文件夹,应该去掉开头的斜杠,改用'*.csv',或者直接用绝对路径匹配更稳妥。 - 依赖
os.chdir的风险:切换目录容易因路径异常导致后续操作静默失败,建议直接用完整路径处理文件,避免切换目录。
修复后的代码
import os import glob import pandas as pd W_I0_data_path = "C:/Users/.../W_L3_I0_000_exd.csv" W_I0_df = pd.read_csv(W_I0_data_path, index_col=None, usecols=[3], names=['I0 Intensity (C/s)'], header=0) W_dir_path = 'C:/Users/.../W' # 遍历父文件夹下所有层级的文件夹 for root, _, _ in os.walk(W_dir_path): # 用绝对路径匹配当前文件夹下的所有CSV文件 for csv_file in glob.glob(os.path.join(root, '*.csv')): # 跳过用于合并的I0文件,避免重复处理 if os.path.basename(csv_file) == os.path.basename(W_I0_data_path): continue temp_df = pd.read_csv(csv_file, index_col=None, usecols=[2,3], names=['Energy (eV)', 'I1 Intensity (C/s)'], header=0) merge_df = temp_df.join(W_I0_df, how='left') # 生成与CSV同目录的TXT文件 txt_file_path = f"{csv_file}.txt" merge_df.to_csv(txt_file_path, index=False, header=False)
额外优化建议
- 添加执行日志:在循环中加入
print(f"已处理文件:{csv_file},生成TXT:{txt_file_path}"),方便跟踪代码执行进度。 - 增加文件校验:读取CSV前可添加
if os.path.isfile(csv_file):判断,避免无效路径导致的隐性错误。
内容的提问来源于stack exchange,提问作者mheaney
相关产品推荐
相关产品推荐

