使用Python(空闲)将JSON转换为CSV

Kri*_* G. 11 python csv json python-idle

我有一个纬度/经度的JSON文件,我想要转换为CSV文件.我想用Python做到这一点.我已阅读/尝试了所有其他stackoverflow和谷歌搜索结果的建议.我已经设法创建了CSV并包含标题,但除此之外,愚蠢的东西开始发生.到目前为止,这是我的代码的工作部分:

import json, csv

x="""[
    {"longitude":"-73.689070","latitude":"40.718000"},
    {"longitude":"-73.688400","latitude":"40.715990"},
    {"longitude":"-73.688340","latitude":"40.715790"},
    {"longitude":"-73.688370","latitude":"40.715500"},
    {"longitude":"-73.688490","latitude":"40.715030"},
    {"longitude":"-73.688810","latitude":"40.714370"},
    {"longitude":"-73.688980","latitude":"40.714080"},
    {"longitude":"-73.689350","latitude":"40.713390"},
    {"longitude":"-73.689530","latitude":"40.712800"},
    {"longitude":"-73.689740","latitude":"40.712050"},
    {"longitude":"-73.689820","latitude":"40.711810"},
    {"longitude":"-73.689930","latitude":"40.711380"},
    {"longitude":"-73.690110","latitude":"40.710710"}
]"""

x = json.loads(x)

f = csv.writer(open("test.csv", "wb+"))

f.writerow(["longitude", "latitude"])
Run Code Online (Sandbox Code Playgroud)

它在哪里崩溃("?"意味着我不知道该放在那里.我已经尝试了各种各样的组合,我在寻找答案时发现了这些组合):

for ? in ?:
    f.writerow([?[?],?[?]])
Run Code Online (Sandbox Code Playgroud)

我从little_fish得到了上述问题答案.我可以看到我们的JSON示例略有不同,我认为这与我无法使其工作的原因有关...

任何帮助将不胜感激,如果需要,我很乐意提供澄清.仅供参考,我是Python的新手,所以如果你要使用行话,请尽可能清楚地解释.谢谢!(PS不确定是否重要,但我使用的是IDLE).

str*_*nac 10

我会使用csv.DictWriter,因为你正在处理dicts,这正是如此DictWriter.

rows = json.loads(x)
with open('test.csv', 'wb+') as f:
    dict_writer = csv.DictWriter(f, fieldnames=['longitude', 'latitude'])
    dict_writer.writeheader()
    dict_writer.writerows(rows)
Run Code Online (Sandbox Code Playgroud)


编辑:
由于该.writeheader()方法仅在2.7中添加,您可以在旧版本上使用类似的内容:

rows = json.loads(x)
fieldnames = ['longitude', 'latitude']
with open('test.csv', 'wb+') as f:
    dict_writer = csv.DictWriter(f, fieldnames=fieldnames)
    dict_writer.writerow(dict(zip(fieldnames, fieldnames)))
    dict_writer.writerows(rows)
Run Code Online (Sandbox Code Playgroud)