在python中解码JSON文本文件
我有一个文本文件,其中每一行都是不同的JSON数组,具有相同的键集,但每一行中的值不同。每行的格式如下:在python中解码JSON文本文件,python,json,csv,Python,Json,Csv,我有一个文本文件,其中每一行都是不同的JSON数组,具有相同的键集,但每一行中的值不同。每行的格式如下: {"Key A":"Value A1","Key B":"Value B1","Key C":"Value C1, Value C2, Value C3"} 我想提取一个键的值和另一个键的前4个值,并导出到csv文件 我希望输出如下所示: Value A1 ["Value C1", "Value C2", "Value C3"] Value A12 ["Value C1
{"Key A":"Value A1","Key B":"Value B1","Key C":"Value C1, Value C2, Value C3"}
我想提取一个键的值和另一个键的前4个值,并导出到csv文件
我希望输出如下所示:
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
到目前为止,我已将文件拆分为多行,如下所示:
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文件,您有什么想法吗?您的意思是:
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])
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...
当您调用
json.loads(line)
时,您将得到字典。试图调用json.loads(jsonmov)
是多余的,会导致错误。您已经有一个字典列表。对不起,那一行是个错误,我已经更新了我的问题…没有那一行…我得到了我提到的错误您的示例代码仍然是错误的-列表索引使用方括号和数字完成:jsonmov[0]
->->列表中的第一个字典。@kegewejsonmov{…}
应该是指(用大括号)?实际上,我很好奇是否有办法在演员姓名周围加引号?在这行末尾加一个\n
,然后。。。\n
在输出到终端时是自动的,而在输出到文件时不是自动的。还有,如何将json文件中的每一行输出到单独的行上