【问题标题】:Convert CSV with Headers to JSON with GeoLocation使用 GeoLocation 将带有标头的 CSV 转换为 JSON
【发布时间】:2014-12-24 02:32:47
【问题描述】:

我有一个以第一行作为标题的 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 中做到这一点?我正在为 Windows 使用 Python

【问题讨论】:

  • 您当前的代码是什么样的?你在用json module吗?
  • 我正在尝试使用这个:stackoverflow.com/questions/19697846/python-csv-to-json 但我无法让它工作,尤其是使用“geo”
  • 可以用什么确切不起作用来更新您的问题吗?
  • 下次尝试在您的问题中付出一些努力。不要只是问我如何在没有任何方法的情况下做到这一点。

标签: python json csv geolocation


【解决方案1】:

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

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)

【讨论】:

  • 谢谢。如何将 li 以及“[”和 json 之间的逗号一起输出到文件中?
  • 让我快速尝试一下
  • 谢谢,我搞定了。似乎有两件事正在发生。我的输出文件中有 ' 而不是 "。即使通过转换 float(latitude),我的纬度仍然被 ' ' 包围。我该如何解决这个问题?谢谢!!
  • 谢谢,这就是我在回答中使用的(见下文)
【解决方案2】:

我会使用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]}'

因为您没有自己的方法,但这应该足以让您付出一些努力。

【讨论】:

    【解决方案3】:

    感谢@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)
    

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 2020-10-04
      相关资源
      最近更新 更多