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字符,您需要知道编码是什么。查德,好的。确保你在阅读和写作时考虑到了这一点。用这个来写: