非Pandas方式给CSV列追加数据,代码无报错但文件未更新
问题分析与解决方案
原代码核心问题
- 文件对象误用:你尝试用已打开的文件对象
csvfile作为参数再次打开文件,这是错误的,Python会将其当作文件名处理,而非指向原CSV文件。 - 写入逻辑错误:用追加模式(
a)写入会在文件末尾新增独立行,而非修改原有行的percentage列,这和你"为已有行填充对应列数据"的需求完全不符。 - 路径处理风险:切换目录后,若CSV文件是相对路径,后续操作可能找不到原文件。
修正后的代码
import csv import os import sys # 获取目标文件夹下的所有txt文件名(避免切换目录) txt_files = set(f for f in os.listdir(sys.argv[1]) if f.endswith('.txt')) # 读取CSV全部数据并存储 csv_rows = [] with open(sys.argv[2], 'r', newline='') as csv_in: reader = csv.DictReader(csv_in) # 保留原CSV的表头结构 field_names = reader.fieldnames for row in reader: target_txt = f"{row['id']}.txt" if target_txt in txt_files: # 替换为你的占比计算代码 perc = 0.68 # 示例计算值 # 更新当前行的percentage字段 row['percentage'] = str(perc) csv_rows.append(row) # 将更新后的数据写回原CSV文件 with open(sys.argv[2], 'w', newline='') as csv_out: writer = csv.DictWriter(csv_out, fieldnames=field_names) writer.writeheader() writer.writerows(csv_rows)
关键修正说明
- 避免目录切换:直接读取目标文件夹的文件列表,无需切换工作目录,防止路径混乱。
- 先读再写:一次性将CSV所有数据加载到内存,修改对应行的
percentage字段后,整体覆盖写入原文件,确保每行数据对应更新。 - 保留原结构:读取原CSV的表头字段,保证输出文件的结构和原文件完全一致。
- 规范文件打开:指定
newline='',避免Windows系统下写入CSV时出现多余空行。
内容的提问来源于stack exchange,提问作者greenc
相关产品推荐
相关产品推荐

