11

CSV ファイルに変換したい緯度/経度の JSON ファイルがあります。Pythonを使用してこれを行いたいです。他のすべてのstackoverflowおよびgoogle検索結果の提案を読んだり試したりしました。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"])

そして、ここでバラバラになります(「?」は、そこに何を入れればよいかわからないことを意味します。答えを探して見つけたあらゆる種類の組み合わせを試しました):

for ? in ?:
    f.writerow([?[?],?[?]])

little_fishによるこの質問への回答から上記を取得しました。私たちの JSON の例は少し異なっていることがわかりますが、それがうまくいかない理由と関係があると思います...

必要に応じて、喜んで説明させていただきます。参考までに、私は Python を初めて使用するので、専門用語を使用する場合は、できるだけ明確に説明してください。ありがとう!(PSそれが問題かどうかはわかりませんが、IDLEを使用しています)。

4

4 に答える 4

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)


編集:
メソッドは 2.7 でのみ追加された ため、.writeheader()古いバージョンでは次のようなものを使用できます。

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)
于 2012-12-12T21:22:05.780 に答える
2

この場合、リストを 1 つずつループし、フィールド名を明示的に書き出すのがおそらく最も簡単です。

for row in x:
    f.writerow( [row['longitude'], row['latitude']] )
于 2012-12-12T21:00:17.303 に答える
1

いくつかの回答応答に基づいて、これは魅力のように機能します!:

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"])

    for row in x:
        f.writerow( [row['longitude'], row['latitude']] )
于 2012-12-12T21:20:30.100 に答える
1

これにより、各項目を反復処理して csv ファイルに書き込むことができます。

import json, csv

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

jsoned = json.loads(x)

with open("test.csv", "wb+") as csv_file:
    csv_writer = csv.writer(csv_file)
    for i in jsoned:
        csv_writer.writerow([i[u'longitude'],
                             i[u'latitide']])

元の投稿で緯度(緯度)のスペルが間違っていることに注意してください。

于 2012-12-12T21:05:21.870 に答える