Python 如何将具有可变长度行的平面json文件转换为csv文件?
这是我所拥有的数据的一个例子Python 如何将具有可变长度行的平面json文件转换为csv文件?,python,json,csv,Python,Json,Csv,这是我所拥有的数据的一个例子 {"a":"1", "b":"2", "c":"3"}, {"a":"1", "b":"2", "c":"3", "d":"4", "e":"5"}, {"a":"1", "b":"2", "c":"3", "d":"4", "e":"5", "f":"6"} 我希望csv为: a,b,c,d,e,f 1,2,3 1,2,3,4,5 1,2,3,4,5,6 我在网上尝试了不同的转换器,但由于json文件的大小约为10 mb,我无法在线转换 import csv
{"a":"1", "b":"2", "c":"3"},
{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5"},
{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5", "f":"6"}
我希望csv为:
a,b,c,d,e,f
1,2,3
1,2,3,4,5
1,2,3,4,5,6
我在网上尝试了不同的转换器,但由于json文件的大小约为10 mb,我无法在线转换
import csv
import json
with open('in.json') as infile:
data = json.load(infile)
headers = set()
for row in data:
headers.update(row.keys())
with open('out.csv', 'w') as outfile:
writer = csv.DictWriter(outfile, headers)
writer.writeheader()
writer.writerows(data)
in.json
:
[
{"a":"1", "b":"2", "c":"3"},
{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5"},
{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5", "f":"6"}
]
out.csv
:
a,c,b,e,d,f
1,3,2,,,
1,3,2,5,4,
1,3,2,5,4,6
我想到了这个:
o = ({"a":"1", "b":"2", "c":"3"},{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5"},{"a":"1", "b":"2", "c":"3", "d":"4", "e":"5", "f":"6"})
header_row = []
# gets the header
for row in o:
for key, value in row.iteritems():
if not key in header_row:
header_row += key
print(key + ',', end='')
# goes through the data
for row in o:
for header_cell in header_row:
if header_cell in row:
print(row[header_cell] + ',', end='')
else:
print(',', end='')
为什么要将数据用作标题?数据指的是键的值。我指的是有a、b、c、d、e、f等标题。如果输入有一行
{“b”:“2”、“c”:“3”}
,会发生什么?你的意思是在每一行的末尾都有逗号吗?在{“b”:“2”,“c”:“3”}的情况下,这一行对a、d、e、f没有值。行尾不需要逗号。如果我不手动定义标题怎么办?另外,我的数据在json文件中。@谢谢Alex,我尝试了上面的代码,但我收到了以下错误:UnicodeEncodeError:“charmap”编解码器无法对1946-1948位置的字符进行编码:字符映射到如果某些行的顺序不正确,例如:[{“a”:“1”,“b”:“2”,“c”:“3”},{“d”:“4”,“a”:“1”,“e”:“5”,它也会给出相同的结果是的,它将正确处理订单。您的文件中包含非ASCII字符,您需要知道编码是什么。查德,好的。确保你在阅读和写作时考虑到了这一点。用这个来写: