我有第一行的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
答案 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)