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
相关产品推荐
相关产品推荐

