Python CSV 写入器不必要时仍添加引号
我在用CSV写入器把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 个回答
1
你需要把引号字符改成其他的,比如不是 " 的东西:
csv.writer(csvfile, delimiter='|',quotechar='&', quoting=csv.QUOTE_MINIMAL)
确保你的对象里没有出现这个引号字符,这一点很重要。
如果你关闭了引号功能,那么在你的 JSON 对象里出现分隔符的时候要小心。
更好的方法是使用 json
模块,以及它的 json.dump()
和 json.load()
函数来写和读这些对象。
11
要关闭自动加引号的功能,可以使用 quoting=csv.QUOTE_NONE
,并把 quotechar
设置为空字符串:
file = csv.writer(open(localResultPath + ".txt",'ab'),
delimiter='|', quoting=csv.QUOTE_NONE, quotechar='')
即使使用了 csv.QUOTE_NONE
,如果 quotechar
不是空字符串,csv.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'