2013-09-27 88 views
1

我使用python csv模塊創建一個csv,其中一些值爲json字符串。然而,csv模塊的報價是完全打破了JSON:使用JSON Python CSV模塊問題

import csv 
import json 
writer = csv.writer(open('tmp', 'w')) 
writer.writerow([json.dumps([{'a' : 'b'}])]) 

的輸出JSON壞了,你可以看到:

cat tmp 
> "[{""a"": ""b""}]" 

import json 
json.loads("[{""a"": ""b""}]") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/json/__init__.py", line 326, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode 
    obj, end = self.scan_once(s, idx) 
ValueError: Expecting property name: line 1 column 2 (char 2) 

而且csv對象轉向引述關:

import csv 
import json 
writer = csv.writer(open('tmp', 'w'), quoting=csv.QUOTE_NONE) 
writer.writerow([json.dumps([{u'a' : u'b'}])]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
_csv.Error: need to escape, but no escapechar set 

有沒有其他人遇到過這個?難道jsoncsv只是不能很好的一起玩? (這不是我的想法,json stirngs csv文件..我現在只需要處理)。不幸的是,這些CSV的我創建包含散列摘要和各種其他複雜的東西,這樣所有的sedawk ISH型解決方案來解決我嘗試都失敗或搞砸了別的東西的JSON ..

+0

刪除'quoting = csv.QUOTE_NONE'參數。 – falsetru

+0

對,但是json仍然被引用破壞。 – qwwqwwq

+0

難道你不能將引號字符改爲'''? – mgilson

回答

2

不使用"作爲你的引用字符。使用別的東西:

with open('tmp', 'w') as fout: 
    writer = csv.writer(fout, quotechar="'") 

真的,這只是整潔的東西了一點。當您讀取數據時,您首先需要通過csv.reader讀取數據來「取消」它。這應該可以讓你恢復你輸入的字符串,其中有效的json

+0

設置quotechar除了''「'以外的任何其他問題解決了這個問題,我的另一個問題是讀取它的其他腳本不使用'csv.reader',它也解決了這個問題 – qwwqwwq