使用GeoLocation将带头的CSV转换为JSON

时间:2014-10-28 15:43:42

标签: python json csv geolocation

我有第一行的CSV作为标题:

location_id name latitude longitude

然后我有10k行数据。纬度和经度是数字

我需要输出看起来像这样:

[
  {
    "location_id":"foo",
    "name":"bar",
    "latitude":28.55323,
    "longitude":-81.28482,
    "geo":{
        "__type": "GeoPoint",
        "latitude": 28.55323,
        "longitude": -81.28482
    }
  },
....
]

如何通过编写脚本在Python中执行此操作?我使用Python for Windows

3 个答案:

答案 0 :(得分:2)

根据我的理解,这似乎是你想要的......
警告:未经测试的代码....

import csv, json

li = []
with open('myfile.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=' ')
    for location_id, name, latitude, longitude in reader:
        li.append({
           "location_id": location_id,
           "name": name,
           "latitude": latitude,
           "longitude": longitude,
           "geo": {
                "__type": "GeoPoint",
                "latitude": latitude,
                "longitude": longitude,
            }
        })
with open("outfile.geo", "w") as f:
    json.dump(li, f)

答案 1 :(得分:1)

我会使用geojson。这是您正在处理的格式。

>>> import geojson
>>> p = geojson.Point([0.0, 0.0])
>>> p
Point(coordinates=[0.0, 0.0])
>>> data = geojson.dumps(p)
'{"type": "Point", "coordinates": [0.0, 0.0]}'

因为你没有自己的方法,这应该足以为你带来一些努力。

答案 2 :(得分:0)

感谢@SchoolBoy的指导

最终代码:

import csv
import json

li = []
with open('test.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:


        li.append({
           "location_id": row["location_id"],
           "name": row["name"],
           "latitude": float(row["latitude"]),
           "longitude": float(row["longitude"]),
           "geo": {
                "__type": "GeoPoint",
                "latitude": float(row["latitude"]),
                "longitude": float(row["longitude"]),
            }
        })

json.dump(li,open('file.json','w'),indent=4,sort_keys=False)