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

2024-09-28 20:51:17 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题与我昨天发布的一个问题背道而驰。实际上我的代码可以正常工作。我是从小开始的。我将Python代码中的JSON切换到Python代码的多个JSON文件外部。我真的把它弄得很漂亮。然后发生了某种灾难,我的代码丢失了。在

我花了几个小时试图重建它,但没有成功。实际上,我使用的是arcpy(ArcGIS的Python模块),因为稍后我将使用它来执行一些空间分析,但是我认为您不需要了解太多arcpy来帮助我完成这一部分(我不认为,但它可能会有所帮助)。在

这是我最近一次尝试的一个版本,但它不起作用。我把我的实际路径改成了“Pathname”,实际上所有的东西都在工作,直到我试图填充CSV中的行(它们是经纬度值)。成功地在CSV文件中写入纬度/经度标题。所以很明显,下面的dict_writer.writerows(openJSONfile)都不起作用:

import json, csv, arcpy
from arcpy import env

arcpy.env.workspace = r"C:\GIS\1GIS_DATA\Pathname"

workspaces = arcpy.ListWorkspaces("*", "Folder")
for workspace in workspaces:

    arcpy.env.workspace = workspace
    JSONfiles = arcpy.ListFiles("*.json")

    for JSONfile in JSONfiles:

        descJSONfile = arcpy.Describe(JSONfile)
        JSONfileName = descJSONfile.baseName

        openJSONfile = open(JSONfile, "wb+")
        print "JSON file is open"

        fieldnames = ['longitude', 'latitude']
        with open(JSONfileName+"test.csv", "wb+") as f:
            dict_writer = csv.DictWriter(f, fieldnames=fieldnames)
            dict_writer.writerow(dict(zip(fieldnames, fieldnames)))
            dict_writer.writerows(openJSONfile)

        #Do I have to open the CSV files? Aren't they already open?
        #openCSVfile = open(CSVfile, "r+")

    for row in openJSONfile:
         f.writerow( [row['longitude'], row['latitude']] )

非常感谢任何帮助!!在


Tags: csv代码inenvjsonforopenworkspace
3条回答

您应该使用csv.DictWriter对象来完成所有操作。这里有一个类似于你的代码的东西,因为我没有它,当我测试它时,它起作用了:

import json, csv

JSONfiles = ['sample.json']

for JSONfile in JSONfiles:

    with open(JSONfile, "rb") as openJSONfile:
        rows = json.load(openJSONfile)

    fieldnames = ['longitude', 'latitude']
    with open(JSONfile+"test.csv", "wb") as f:
        dict_writer = csv.DictWriter(f, fieldnames=fieldnames)
        dict_writer.writeheader()
        dict_writer.writerows(rows)

没有必要写出每一行,因为json文件是行字典的列表(假设它是嵌入到链接问题中的内容)。在

我不能肯定我知道哪里出了问题,但是把所有的.JSON文件放在我的代码所在的同一个文件夹中(并适当地更改我的代码)是可行的。我将继续调查为什么在试图读取其他文件夹时,它会给我错误:

IOError: [Errno 2] No such file or directory:

目前,以下代码确实有效:)

^{pr2}$

谢谢大家的帮助。在

您实际上没有加载JSON文件。
您尝试从打开的文件中写入行,而不是从json写入行。在

您需要添加如下内容:

rows = json.load(openJSONfile)

以及以后:

^{pr2}$

最后两行应该被删除,因为所有的csv写入都是在到达它们之前完成的,而且它们在循环之外,所以它们只对最后一个文件起作用(它们不写任何东西,因为此时文件中没有行了)。在

另外,我看到您正在使用with open...打开csv文件,而不是json文件。
您应该始终使用它,而不是使用没有with语句的open()。在

相关问题 更多 >