JSON到CSV - 只写一次未知的标题行

时间:2017-01-30 20:51:51

标签: python python-3.x

我有一个小脚本,可以将JSON对象转换为字典,如下所示:

import csv
import json
import sys

jFile = open('path\\to\\jsonFile.json')
j = jFile.read()

class Payload(object):
    def __init__(self, j):
        self.__dict__ = json.loads(j)

p = Payload(j)

然后我可以循环遍历字典以便相当容易地获得我的键值对:

for d in p.Data:
    for key in d:
        #Do Something

将所有值写入CSV文件也很简单,但编写标题的最“Pythonic”方法是什么?我知道我可以做类似下面的事情,但这似乎效率低下而不是最佳实践。

...
p = Payload(j)
with open('path\\to\\csvFile.csv','w',encoding='utf8',newline='') as f:
    for i, d in enumerate(p.Data):
        w = csv.DictWriter(f, d.keys())
        if i == 0:
            w.writeheader()
        w.writerow(d)

有没有办法只在没有每次迭代进行评估的情况下编写标题一次?

1 个答案:

答案 0 :(得分:1)

with open('path\\to\\csvFile.csv','w',encoding='utf8',newline='') as f:
    w = csv.DictWriter(f, p.Data[0].keys())
    w.writeheader()
    for d in p.Data:
        w.writerow(d)

只是在循环之外做。