2014-02-11 75 views
0

我有一個文本文件,其中每行是不同的JSON數組,具有相同的一組鍵,但每行的值不同。每一行的格式如下所示:解碼python中的JSON文本文件

{"Key A":"Value A1","Key B":"Value B1","Key C":"Value C1, Value C2, Value C3"} 

我想拉一個關鍵的價值觀和另一個關鍵和導出爲CSV文件的第4個值。

我所要的輸出是這樣的:文件

Value A1  ["Value C1", "Value C2", "Value C3"] 
Value A12  ["Value C12", "Value C22", "Value C32"] 

到目前爲止,我已經拆分成多行這樣的:

import json 
import csv 

jsonmov = [] 
with open('step3_desired_output.txt') as step3: 
    for line in step3: 
     jsonmov.append(json.loads(line)) 


print jsonmov{u'Title',[u'Actors'[0:3]]} #print each line from jsonmov's title and 4 actors 

這給了我一個錯誤:

TypeError: list indices must be integers, not tuple 

打印行的另一種語法:

print jsonmov(u'Title',u'Actors') 

給出了錯誤

TypeError: 'list' object is not callable: 

如何產生CSV文件格式正確任何想法?

+2

當你調用'json.loads(線)'你最終與字典。試圖調用'json.loads(jsonmov)'是多餘的,會導致錯誤。你已經有一個詞典列表。 –

+0

對不起,該行是一個錯誤,我更新了我的問題......沒有這條線......我得到我提到的錯誤 – kegewe

+0

您的示例代碼仍然是錯誤的 - 列表索引使用方括號和數字完成: 'jsonmov [0]' - >列表中的第一個字典。 –

回答

1
import json 
import csv 

INPUT = 'step3_desired_output.txt' 
OUTPUT = 'my.csv' 
MAXACTORS = 3 

with open(OUTPUT, 'wb') as outf: 
    outcsv = csv.writer(outf) 
    with open(INPUT) as inf: 
     for line in inf: 
      mv = json.loads(line) 
      title = mv['Title'] 
      actors = mv['Actors'].split(', ', MAXACTORS) 
      outcsv.writerow([title] + actors[:MAXACTORS]) 
1

你的意思是這樣的:

import json 
import csv 

with open('/tmp/test.json') as f, open('/tmp/jout.csv', 'w') as fout: 
    writer=csv.writer(fout) 
    for line in f: 
     jline=json.loads(line) 
     print jline[u'Key A']+'\t['+jline[u'Key C']+']' 
     # Value A1 [Value C1, Value C2, Value C3] 
     # write to writer... 

編輯

也許:

import json 

with open('/tmp/test.json') as f, open('/tmp/jout.csv', 'w') as fout: 
    for line in f: 
     data=[] 
     jline=json.loads(line) 
     print jline[u'Key A']+'\t['+', '.join('"{}"'.format(e.strip()) for e in jline[u'Key C'].split(','))+']' 
     # Value A1 ["Value C1", "Value C2", "Value C3"] 
     # add '\n' if you print to a file... 
+0

其實,我很好奇是否有辦法得到演員名字的引號? – kegewe

+0

在行的末尾添加一個'\ n',然後...當輸出到終端時,\ n是自動的,當輸出到文件時不是自動的。 – dawg

+0

而且,如何從json文件中獲取每行並輸出到單獨的行 – kegewe