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

Python csv.writer写入CSV出现多余字符问题及解决方法

Python CSV处理:删除指定行后写入格式错误的解决办法

问题场景

我写了个Python脚本读取CSV文件,把内容存进数组后删除第二行,再写回CSV。但写完后文件里多出了'、]这类字符,多次运行引号还会越来越多。

原始CSV内容

first name,username,age,status
test1,test1_username,28,2023-08-18 13:41:10+00:00
test2,test2_username,28,2023-08-18 13:41:10+00:00
test3,test3_username,28,2023-08-18 13:41:10+00:00
test4,test4_username,28,2023-08-18 13:41:10+00:00
test5,test5_username,28,2023-08-18 13:41:10+00:00
test6,test6_username,28,2023-08-18 13:41:10+00:00
test7,test7_username,28,2023-08-18 13:41:10+00:00
test8,test8_username,28,2023-08-18 13:41:10+00:00

错误输出结果

first name,username,age,status
test2', 'test2_username', '28', '2023-08-18 13:41:10+00:00']]
test3', 'test3_username', '28', '2023-08-18 13:41:10+00:00']]
test4', 'test4_username', '28', '2023-08-18 13:41:10+00:00']]
test5', 'test5_username', '28', '2023-08-18 13:41:10+00:00']]
test6', 'test6_username', '28', '2023-08-18 13:41:10+00:00']]
test7', 'test7_username', '28', '2023-08-18 13:41:10+00:00']]
test8', 'test8_username', '28', '2023-08-18 13:41:10+00:00']]

期望输出结果

first name,username,age,status
test2,test2_username,28,2023-08-18 13:41:10+00:00
test3,test3_username,28,2023-08-18 13:41:10+00:00
test4,test4_username,28,2023-08-18 13:41:10+00:00
test5,test5_username,28,2023-08-18 13:41:10+00:00
test6,test6_username,28,2023-08-18 13:41:10+00:00
test7,test7_username,28,2023-08-18 13:41:10+00:00
test8,test8_username,28,2023-08-18 13:41:10+00:00

原代码

data = []

rows = []
with open('list.csv', 'r', encoding='UTF-8') as f:
    data = csv.reader(f,delimiter=",",lineterminator="\n")
    for row in data:
        rows.append([row,])

rows = rows[2:]
with open('list.csv', 'w', encoding='UTF-8') as g:
    writer = csv.writer(g, delimiter="\n")
    writer2 = csv.writer(g, lineterminator="\n")
    writer2.writerow(['first name', 'username', 'age', 'status'])

错误原因分析

  1. 读取时的嵌套列表错误:原代码里rows.append([row,])把每行(本身就是列表)又包了一层嵌套列表,变成[[row1], [row2], ...],后续写入时csv模块会把这种嵌套结构转成带引号和方括号的字符串,就出现了'和]。
  2. 写入器配置错误:创建了两个csv.writer,而且第一个把delimiter设成了\n——delimiter是CSV字段之间的分隔符,应该用逗号,改成换行符会彻底打乱格式;另外原代码只写了表头,没把处理后的rows内容写进去。
  3. 行索引处理错误:rows = rows[2:]直接从第三行开始取,把表头也删掉了,之后又手动写表头,逻辑混乱。

修复后的代码

import csv

# 读取CSV文件
rows = []
with open('list.csv', 'r', encoding='UTF-8') as f:
    reader = csv.reader(f)
    rows = list(reader)

# 删除第二行(索引为1的行,也就是test1那一行)
if len(rows) > 1:
    rows.pop(1)

# 写回CSV文件
with open('list.csv', 'w', encoding='UTF-8', newline='') as g:
    writer = csv.writer(g)
    writer.writerows(rows)

代码说明

  • 读取时直接把reader转成列表,每行就是一个普通列表,没有多余嵌套。
  • 用rows.pop(1)精准删除第二行(表头是索引0,要删的test1行是索引1),保留表头和后续行。
  • 写入时只用一个csv.writer,newline=''避免Windows下出现多余空行,用writerows一次性写入所有行,格式完全符合CSV规范。

内容的提问来源于Stack Exchange,提问作者Santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:14:54