Python中如何处理CSV写入时双引号被错误转义为多个双引号的问题

csv.writer(f, dialect=“excel”).writerow( [{“found_year”:found_year,“jg_type”:jg_type,“area”:area,“source_gw_link”:source_gw_link,“jianjie”:jianjie,“lianxi”:lianxi},{“company_news”:company_news}, {“name”:name,“sex”:sex,“company”:company,“position”:position,“role” :role, “edu_experience”:edu_experience,“work_experience”: json.dumps(OrderedDict(sorted(work_experience.items()))).encode(‘utf-8’).decode(‘unicode_escape’)}, {“lingyu”:lingyu,“jiguan”:jiguan,“lunci”:lunci,“jieduan”:jieduan,“jieshao”:jieshao,“money_type”:money_type,“touzianlie”:json.dumps(OrderedDict (sorted(tzanli.items()))).encode(‘utf-8’).decode(‘unicode_escape’)},{“person_news”:json.dumps(OrderedDict(sorted(person_news.items()))).encode(‘utf-8’).decode(‘unicode_escape’)}])



这段信息 其中的一段 我打印屏幕上 是这样的’news_date’: ‘2018.7.17’,后来就插入 csv 后就变成这样了
"“news_date”": ""2018.7.26""
Python中如何处理CSV写入时双引号被错误转义为多个双引号的问题


6 回复

这个问题我遇到过,是CSV写入时常见的引号转义问题。

当CSV字段包含双引号时,Python的csv模块会默认用双引号将其转义,变成两个双引号。比如字段 "hello" 会变成 """hello"""

解决方案:

  1. 使用 quoting 参数控制引号行为
import csv

data = ['正常文本', '带"引号"的文本', '另一个字段']

# 方法1:完全禁用引号(最简单)
with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_NONE, escapechar='\\')
    writer.writerow(data)

# 方法2:只在必要时加引号(推荐)
with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_MINIMAL)
    writer.writerow(data)

# 方法3:所有字段都加引号
with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_ALL)
    writer.writerow(data)
  1. 如果已经生成了文件,可以修复
import csv

# 读取并重新写入
with open('problem.csv', 'r', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    rows = list(reader)

with open('fixed.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_MINIMAL)
    writer.writerows(rows)

关键参数说明:

  • csv.QUOTE_MINIMAL:只在必要时加引号(默认值,但有时需要显式指定)
  • csv.QUOTE_ALL:所有字段都加引号
  • csv.QUOTE_NONE:不加引号(需要指定escapechar)
  • csv.QUOTE_NONNUMERIC:非数字字段加引号

建议: 明确指定 quoting=csv.QUOTE_MINIMAL 通常能解决大部分问题。

不行,老嘲讽显得不够意思,我觉好好看看楼主的帖子

接 #3

请楼主把代码全部贴上来,用到的数据也要上传,因为要测试,你的问题要截图,必要时录屏

pandas.read_csv
pandas.to_csv

回到顶部