Python CSV:从值中删除引号

neo*_*ser 12 python csv

我有一个过程,可以下载,编辑然后再次上传CSV文件.在下载时,CSV文件的格式正确,没有包装双引号

1, someval, someval2
Run Code Online (Sandbox Code Playgroud)

当我在电子表格中打开CSV,编辑并保存时,它会在字符串周围添加双引号

1, "someEditVal", "someval2"
Run Code Online (Sandbox Code Playgroud)

我认为这只是电子表格的动作(在这种情况下,openoffice).我希望我的上传脚本删除包装双引号.我无法删除所有引号,只是包含正文包含它们,我也不想只检查双引号的第一个和最后一个字符.

我几乎可以肯定python中的CSV库会知道如何处理这个,但不知道如何使用它...

编辑当我使用字典中的值时,它们如下所示

{'header':'"value"'}
Run Code Online (Sandbox Code Playgroud)

谢谢

Sve*_*ach 17

对于您的示例,以下工作:

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)
Run Code Online (Sandbox Code Playgroud)

您可能需要使用CSV读取器和写入器的方言选项 - 请参阅模块文档csv.

  • 如果OP说他在内容中有"``,则QUOTE_NONE不是一个好主意. (2认同)
  • 似乎有一些证据表明OP想要的不是OP所需要的:-) (2认同)

neo*_*ser 10

感谢所有想帮助我的人,但我明白了.指定阅读器时,您可以定义quotechar

csv.reader(upload_file, delimiter=',', quotechar='"')
Run Code Online (Sandbox Code Playgroud)

这会处理字符串的包装引号.

  • 您传递的两个参数只是默认值 - 您可以简单地省略它们!这不会解析你的问题中的示例数据 - 这只适用于`skipinitialspace = True`. (3认同)
  • 由你决定......当然,保留它并不是很有用. (2认同)

Yuc*_*ong 5

对于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)
Run Code Online (Sandbox Code Playgroud)

原始答案在Python 3下给出了此错误。另请参见此 SO:csv.Error:迭代器应返回字符串,而不是字节

追溯(最近一次通话):文件“ remove_quotes.py”,位于writer.writerows(reader)_csv中的第11行,错误:迭代器应返回字符串,而不是字节(您是否以文本模式打开文件?)