Python CSV: 从值中移除引号

21 投票
3 回答
80615 浏览
提问于 2025-04-16 10:20

我有一个流程,可以下载一个CSV文件,编辑后再上传。下载时,CSV文件格式是正确的,没有多余的双引号。

1, someval, someval2

但是当我在电子表格软件中打开这个CSV文件,进行编辑并保存时,它会在字符串周围加上双引号。

1, "someEditVal", "someval2"

我觉得这只是电子表格软件(在这个例子中是openoffice)造成的。我希望我的上传脚本能去掉这些多余的双引号。我不能删除所有的引号,以防内容中本身就有引号,而且我也不想只检查字符串的首尾字符是否是双引号。

我几乎可以肯定Python的CSV库能处理这个问题,但我不太确定怎么使用它……

编辑:当我在字典中使用这些值时,它们的表现如下:

{'header':'"value"'}

谢谢

3 个回答

10

对于Python 3

import csv
writer = csv.writer(open("query_result.csv", "wt"), quoting=csv.QUOTE_NONE, escapechar='\\')
reader = csv.reader(open("out.txt", "rt"), skipinitialspace=True)
writer.writerows(reader)

原来的答案在Python 3中会出现这个错误。你可以查看这个链接了解更多细节:csv.Error: 迭代器应该返回字符串,而不是字节

错误追踪(最近的调用在最后): 文件 "remove_quotes.py",第11行,在 writer.writerows(reader) _csv.Error: 迭代器应该返回字符串,而不是字节(你是以文本模式打开文件的吗?)

14

感谢所有试图帮助我的人,但我自己解决了这个问题。当你设置读取器的时候,可以定义一个叫做quotechar的东西。

csv.reader(upload_file, delimiter=',', quotechar='"')

这个设置可以处理字符串的包裹引号。

27

根据你的例子,下面的代码可以正常工作:

import csv
writer = csv.writer(open("out.csv", "wb"), quoting=csv.QUOTE_NONE)
reader = csv.reader(open("in.csv", "rb"), skipinitialspace=True)
writer.writerows(reader)

你可能需要调整一下CSV读取器和写入器的方言选项——可以查看一下这个关于csv模块的文档

撰写回答