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

非Pandas方式给CSV列追加数据,代码无报错但文件未更新

问题分析与解决方案

原代码核心问题

  1. 文件对象误用:你尝试用已打开的文件对象csvfile作为参数再次打开文件,这是错误的,Python会将其当作文件名处理,而非指向原CSV文件。
  2. 写入逻辑错误:用追加模式(a)写入会在文件末尾新增独立行,而非修改原有行的percentage列,这和你"为已有行填充对应列数据"的需求完全不符。
  3. 路径处理风险:切换目录后,若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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:26:01