2013-09-27 2 views
1

저는 파이썬 csv 모듈을 사용하여 일부 값이 json 문자열 인 csv를 만듭니다.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 
그러나 csv 모듈의 인용은 완전히 JSON을 파괴한다

누구도이 문제가 발생 했습니까? jsoncsv은 서로 잘 어울리지 않습니까? (csv 파일에 json 교반을 저장하는 것은 내 아이디어가 아닙니다. 지금 당장 처리해야 할 부분이 있습니다.) 불행하게도, 내가 해시 다이제스트를 포함 만드는 오전이 CSV를 모든 sed 또는 awk 틱 형 솔루션은 내가 실패 또는 뭔가를 엉망 시도한 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