批量处理CSV文件时重复输出及文件路径错误问题求助
问题分析与修复
核心问题1:输出文件数据全部重复
你的代码逻辑存在严重错误:外层循环遍历每个输入CSV文件,处理完当前文件的数据后,内层循环把当前文件的同一组数据写入所有1323个日期文件。这意味着每个输入文件处理完都会覆盖所有输出文件的内容,最终所有文件只会保留最后一个输入文件的数据。
核心问题2:FileNotFoundError
你直接将realdates列表插入文件名,列表被字符串化后会变成[20090325,...20150801]这种格式,这显然不是合法的文件名。另外注意路径写法,比如E:Arman缺少斜杠,应写成E:/Arman或E:\\Arman。
修复方案
正确逻辑是每个输入文件对应一个输出文件,从当前输入文件的文件名中提取日期,用该日期作为输出文件名,无需遍历整个realdates列表。
步骤1:从输入文件路径提取日期(替代单独生成realdates)
无需单独用os.listdir生成日期列表,直接从每个path中提取日期更可靠,避免glob和os.listdir返回顺序不一致的问题:
filename = os.path.basename(path) date_str = filename[:8]
步骤2:修正循环逻辑,单输入文件对应单输出文件
去掉内层的for i in range(1323)循环,处理完当前输入文件后直接写入对应输出文件。
完整修复代码
import glob import numpy as np import pandas as pd import os # 输入文件路径 filepaths = glob.glob('C:/Users/Freedom/Desktop/Pronimances/*.csv') # 输出目录,确保目录存在,不存在则创建 output_dir = 'C:/Users/Freedom/Desktop/Prom_Tracking/' os.makedirs(output_dir, exist_ok=True) for path in filepaths: # 读取数据 data = np.loadtxt(path, delimiter=',', skiprows=1, dtype='int', usecols=(0,1,2,3,4,5,6), unpack=True) times = data[0] nums = data[1] Left = data[2] Right = data[3] y = data[4] area = data[6] # 这里是你处理数据生成list2、realpromID、listd、listb的代码 # code that manipulates data and creates new lists has been omitted # 构造数据字典 data_dict = { 'Time': list2, 'Prominence Number': realpromID, 'Left Edge (Pixels)': Left, 'Right Edge (Pixels)': listd, 'Prominence Area': listb } # 从当前输入文件提取日期 filename = os.path.basename(path) date_str = filename[:8] # 构造输出文件路径 output_path = os.path.join(output_dir, f'{date_str}.csv') # 写入CSV(index=False避免生成默认索引列) df = pd.DataFrame(data_dict) df.to_csv(output_path, index=False)
额外注意事项
- 用
os.makedirs(output_dir, exist_ok=True)确保输出目录存在,避免因目录不存在引发的FileNotFoundError。 - 确保你省略的数据处理代码是针对当前输入文件生成对应列表(
list2、realpromID等),而非全局固定列表。
内容的提问来源于stack exchange,提问作者Bob_007
相关产品推荐
相关产品推荐

