【问题标题】:python csv writer is adding quotes when not neededpython csv writer在不需要时添加引号
【发布时间】:2014-04-24 12:31:42
【问题描述】:

我在使用 csv writer 将 json 对象写入文件时遇到问题,json 对象周围似乎有多个双引号,从而导致 json 对象变得无效,结果如下:

"{""user.CustomAttribute.ISOLanguageCode"": ""en"", ""user.Email"": ""emzy1786@googlemail.com""

我想要的是

{"user.CustomAttribute.ISOLanguageCode": "en", "user.Email"": "emzy1786@googlemail.com"}

这是我打开文件的方式,也许我可以传递一个参数来防止这种情况发生?

file = csv.writer(open(localResultPath + ".txt",'ab'),delimiter = '|')

这是我写入文件的方式,最后一个追加将 json 添加为字符串

list.append(pk)
list.append(email)
list.append(json)
file.writerow(list)

【问题讨论】:

  • 能否请您告诉我们您实际上是如何将文件写入打开的文件的?
  • 做了改动请看一下
  • @Asad:这里没关系。

标签: python json csv


【解决方案1】:

您必须将quotechar 更改为s.th。除了 " :

csv.writer(csvfile, delimiter='|',quotechar='&', quoting=csv.QUOTE_MINIMAL)

确保引号字符显然不会出现在您的对象中。

如果您关闭引用,那么当您的分隔符也出现在 JSON-Object 中时,您必须小心。 更好的方法是使用json 模块及其函数json.dump()json.load() 来写入和读取对象

【讨论】:

    【解决方案2】:

    使用quoting=csv.QUOTE_NONE 关闭自动引用,并将quotechar 设置为空字符串:

    file = csv.writer(open(localResultPath + ".txt",'ab'), 
                      delimiter='|', quoting=csv.QUOTE_NONE, quotechar='')
    

    即使使用csv.QUOTE_NONEcsv.writer() 仍然希望引用quotechar,如果设置为除空字符串之外的任何内容(如果值中存在)。默认的引号字符是",JSON 值都是这些字符。

    演示:

    >>> from cStringIO import StringIO
    >>> import csv
    >>> f = StringIO()
    >>> writer = csv.writer(f, delimiter='|', quoting=csv.QUOTE_NONE, quotechar='')
    >>> writer.writerow(['{"user.CustomAttribute.ISOLanguageCode": "en"}'])
    >>> f.getvalue()
    '{"user.CustomAttribute.ISOLanguageCode": "en"}\r\n'
    

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2019-01-30
      • 2018-10-04
      • 1970-01-01
      • 2015-02-17
      相关资源
      最近更新 更多