这个问题背负着我昨天发布的question。我实际上让我的代码工作正常。我从小开始。我为Python代码中的多个JSON文件外部的Python代码中的JSON 切换了。我实际上得到了漂亮的工作。然后出现了某种灾难,我的代码丢失了。
我花了几个小时试图重新创建它无济于事。我实际上正在使用arcpy(ArcGIS的Python模块),因为我稍后将使用它来执行一些空间分析,但我认为你不需要了解很多关于arcpy来帮助我解决这个问题(我不认为) ,但它可能会有所帮助)。
这是我最近尝试的一个版本,但它无效。我将实际路径改为“路径名”。实际上,当我尝试填充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']] )
非常感谢任何帮助!!
答案 0 :(得分:0)
您实际上并没有加载JSON文件 您正在尝试从打开的文件中写入行,而不是从json写入行。
您需要添加以下内容:
rows = json.load(openJSONfile)
以后:
dict_writer.writerows(rows)
你应该删除最后两行,因为所有csv写入都是在你到达它们之前完成的,并且它们在循环之外,所以它们只能用于最后一个文件(它们不会写任何东西) ,因为此时文件中没有任何行)。
另外,我看到你正在使用with open...
打开csv文件,而不是json文件。
您应该始终使用它,而不是在没有open()
语句的情况下使用with
。
答案 1 :(得分:0)
您应该使用csv.DictWriter
对象来执行所有操作。这里有类似于你的代码的东西,删除了所有的Arc东西,因为我没有它,当我测试它时有效:
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文件是一个行字典列表(假设它是你在链接问题中嵌入的那个)。
答案 2 :(得分:0)
我不能说我确定错误,但将所有.JSON文件放在与我的代码相同的文件夹中(并适当地更改我的代码)。我将不得不继续调查为什么,当试图读入其他文件夹时,它给了我错误:
IOError: [Errno 2] No such file or directory:
目前,以下代码可以正常工作:)
import json, csv, arcpy, os
from arcpy import env
arcpy.env.workspace = r"C:\GIS\1GIS_DATA\MyFolder"
JSONfiles = arcpy.ListFiles("*.json")
print JSONfiles
for JSONfile in JSONfiles:
print "Current JSON file is: " + JSONfile
descJSONfile = arcpy.Describe(JSONfile)
JSONfileName = descJSONfile.baseName
with open(JSONfile, "rb") as openJSONfile:
rows = json.load(openJSONfile)
print "JSON file is loaded"
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(rows)
print "CSVs are Populated with headers and rows from JSON file.", '\n'
感谢大家的帮助。