0

この質問は、私が昨日投稿した質問に便乗しています。私は実際に自分のコードをうまく動作させました。私は小さく始めていました。Python コードの外部にある複数の JSON ファイル用に、Python コードの JSON を切り替えました。私は実際にそれを美しく機能させました。そして、なんらかの大惨事が起こり、コードが失われました。

私はそれを無駄に再現しようとして数時間を費やしました. 実際には arcpy (ArcGIS の Python モジュール) を使用しています。これは、後で空間分析を実行するために使用するためです。 、しかしそれは役立つかもしれません)。

これは私の最新の試みの 1 つのバージョンですが、機能していません。実際のパスを「パス名」だけに切り替えました。実際には、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']] )

どんな助けでも大歓迎です!!

4

3 に答える 3

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'

皆さんの助けに感謝します。

于 2012-12-13T16:23:52.097 に答える
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 ファイルは行辞書のリストであったため、各行を書き出す必要はありませんでした (リンクされた質問に埋め込んだものであると仮定します)。

于 2012-12-13T14:16:41.363 に答える
0

実際に JSON ファイルを読み込んでいるわけではありません。
json から行を書き込むのではなく、開いているファイルから行を書き込もうとしています。

次のようなものを追加する必要があります。

rows = json.load(openJSONfile)

以降:

dict_writer.writerows(rows)

すべての csv 書き込みはそれらに到達する前に行われ、ループの外にあるため、最後の 2 行は削除する必要があります。したがって、最後のファイルに対してのみ機能します (そこにあるため、何も書き込みません)。その時点でファイルに行が残っていない)。

また、with open...json ファイルではなく、csv ファイルを開くために使用しているようです。ステートメントなしで使用するの
ではなく、常に使用する必要があります。open()with

于 2012-12-13T13:49:48.697 に答える