【问题标题】:Python CSV: Remove quotes from valuePython CSV:从值中删除引号
【发布时间】:2020-03-14 10:57:23
【问题描述】:

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

1, someval, someval2

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

1, "someEditVal", "someval2"

我认为这只是电子表格的操作(在本例中为 openoffice)。我希望我的上传脚本删除包装双引号。我不能删除所有引号,只要正文包含它们,我也不想只检查双引号的第一个和最后一个字符。

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

编辑 当我使用字典中的值时,结果如下

{'header':'"value"'}

谢谢

【问题讨论】:

  • 引号一般被认为在CSV文件中是允许的。您确定必须删除它们吗?
  • 是的,我在处理脚本中使用它们将它们放入字典中,结果是这样的 {'header':'"value"'}
  • Open office calc 3.2 不会在逗号后放置空格。你用的是什么版本?

标签: python csv


【解决方案1】:

例如,以下工作:

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 读取器和写入器的方言选项 - 请参阅 documentation of the csv module

【讨论】:

  • QUOTE_NONE 在下载/创建 CSV 时有效,这很棒!但我的问题是当我编辑 csv(这是添加双引号的地方)并再次上传时。不过感谢您的帮助!
  • 我给出的代码不是用来解析文件的——它是用来将你的“错误”文件转换为“正确”文件的。如果您只想阅读它,请仅使用阅读器,而不是编写器。也许你只需要skipinitialspace=True
  • QUOTE_NONE 不是一个好主意,如果 OP 说他在内容中有"
  • @John:OP 希望删除这些引号——这就是脚本的作用。我对你的评论感到困惑。
  • 似乎有一些证据表明 OP 想要的不是 OP 需要的 :-)
【解决方案2】:

感谢所有试图帮助我的人,但我想通了。指定读者时,可以定义quotechar

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

这处理字符串的换行引号。

【讨论】:

  • 您传递的两个参数只是默认值——您可以直接省略它们!这不会解析您问题中的示例数据——这只适用于skipinitialspace=True
  • 啊,好的,谢谢斯文!我省略了这些参数,它仍然有效,感谢您的帮助。我使用默认参数使用阅读器。如果您想发布作为答案,请标记它
  • 如果这可行,您没有在问题中发布真实数据。至于问题中的数据,这是行不通的。
  • 原来我使用的原始阅读器将quotechar定义为管道......(我对stackoverflow很陌生,我应该删除这个问题,因为这是我的错误吗?)
  • 由你决定......当然保留它不是很有用。
【解决方案3】:

对于 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 下给出了此错误。有关详细信息,另请参阅此 SO:csv.Error: iterator should return strings, not bytes

Traceback(最近一次调用最后一次): 文件“remove_quotes.py”,第 11 行,在 writer.writerows(读者) _csv.Error: 迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?)

【讨论】:

  • 为什么writer'rt'mode,readerwt?我也认为你应该设置escapechar
  • @Zangetsu 这是个好电话。感谢您指出。我会更新答案。
猜你喜欢
  • 1970-01-01
  • 2019-06-18
  • 2017-02-13
  • 2017-02-14
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多