python csv writer在不需要时添加引号

时间:2014-03-18 16:53:30

标签: python json csv

我在使用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)

2 个答案:

答案 0 :(得分:6)

使用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'

答案 1 :(得分:1)

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

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

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

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

相关问题