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

Python使用csv Writer复制CSV文件时自动添加多余双引号的问题解决咨询

Python使用csv Writer复制CSV文件时自动添加多余双引号的问题解决咨询

嘿,我来帮你搞定这个CSV复制时多出双引号的麻烦!先理清楚你的情况:你用csv模块读取原CSV文件后逐行写入新文件,但复制完成后的数据里出现了大量多余的双引号——比如原字段"Emil Janning"变成了" ""Emil Janning""",这确实挺闹心的。

先看你的原始代码

import csv  # 补充你遗漏的csv模块导入

# Reading from csv file
with open('py_csv/oscar_age_male.csv','r') as csv_file:
    csv_reader=csv.reader(csv_file)

# Creating new file and opening it and changing delimiter
with open('py_csv/newfile.csv','w')as newfile:
    csv_writer=csv.writer(newfile)

# Writing Row by row
for line in csv_reader:
    csv_writer.writerow(line)

问题现象对比

原文件数据:

1, 1928, 44, "Emil Janning", "The Last Command, The Way of All Flesh"
2, 1929, 41, "Warner Baxter", "In Old Arizona"

复制后的数据:

1, 1928, 44," ""Emil Janning"""," ""The Last Command"," The Way of All Flesh"""
2, 1929, 41," ""Warner Baxter"""," ""In Old Arizona"""

问题根源

出现多余双引号的核心原因是:csv.writer默认的引号处理规则和原CSV文件的规则不匹配。原文件里已经用双引号包裹了包含逗号的字段(比如"The Last Command, The Way of All Flesh"),而csv.writer默认会对包含分隔符(逗号)的字段自动添加双引号,同时把字段内原有的双引号转义成两个(这是doublequote=True的默认行为),双重作用下就导致了重复引号的问题。

解决方案

最稳妥的方式是让读写双方使用一致的格式规则,推荐用csv.Sniffer自动检测原文件的格式(分隔符、引号规则等),然后复用这个规则写入新文件。修改后的代码如下:

import csv

# 读取原文件并自动检测格式
with open('py_csv/oscar_age_male.csv','r') as csv_file:
    # 读取部分内容用于格式检测
    sample = csv_file.read(1024)
    # 嗅探文件的dialect(格式规则)
    dialect = csv.Sniffer().sniff(sample)
    # 回到文件开头重新读取内容
    csv_file.seek(0)
    csv_reader = csv.reader(csv_file, dialect)

    # 使用相同的dialect写入新文件
    with open('py_csv/newfile.csv','w') as newfile:
        csv_writer = csv.writer(newfile, dialect)
        for line in csv_reader:
            csv_writer.writerow(line)

如果自动检测遇到问题,你也可以手动指定writer参数来匹配原文件:

import csv

with open('py_csv/oscar_age_male.csv','r') as csv_file:
    csv_reader = csv.reader(csv_file)

    with open('py_csv/newfile.csv','w') as newfile:
        # 根据原文件规则设置:仅对含分隔符的字段加引号,且不转义原有双引号
        csv_writer = csv.writer(newfile, quoting=csv.QUOTE_MINIMAL, doublequote=False)
        for line in csv_reader:
            csv_writer.writerow(line)

这样处理后,新文件的格式就会和原文件完全一致,不会再出现多余的双引号啦!

备注:内容来源于stack exchange,提问作者Md Aatif Hasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:23:03