Python CSV: 从值中移除引号
我有一个流程,可以下载一个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
模块的文档。