我有来自csv文件的信息,该文件最初是一个json对象(字典列表)。 csv中的信息保存在行中,它具有以下结构:
{ 'geometry': { 'location': { 'lat': 48.121096, 'lng': 14.868725}},
'icon': 'http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png',
'id': '322572963ad2ccd534d8a6ec3e71eba67953400c',
'name': u"McDonald's \xd6sterreich",
'price_level': 1,
'reference': 'CoQBeAAAAOQrvtFrvdPFavW8IPAtNz5BqUOxB6j0dAWXZzgx673-pYV-JLzDk4q9Q1lK2e1Tmn7xiGSwrOAT27rlnr00NJvskvS7isZOIz48RWv8SZo4jbl_RiiEfpz7SpD3fQNB31aJexfB6n2SsNz6FL8StgZIdErv6u4mR-a-xCbMU5CREhBB3r-DyRrOks1EPQz22JQXGhSmPRi0Ht5k0VPTAFVefDF0HQ3xZQ',
'types': ['restaurant', 'food', 'establishment'],
'vicinity': u'Waidhofner Stra\xdfe 1, im City Center Amstetten'}
有时行包含两个或多个这些词典列表。我有兴趣提取的信息是'lat'和'lng'。理想情况下,我希望在数据框中有这两个坐标,如下所示:
lat lng
48.098 5.0886
48.110 5.1390
48.234 5.1679
这是我到目前为止的代码:
import re
import csv
datafile = open('c:/users/J/Desktop/listaraw.csv', 'r')
datareader = csv.reader(datafile)
data = []
for row in datareader:
data.append(row)
point_re = re.compile('.*lat.*;')
point_lat = point_re.search(str(data)).group(1)
但我得到以下信息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: no such group
关于如何完成这项任务的任何想法?
以下是供进一步参考的文件:https://www.dropbox.com/s/6t5dgbzyu1apef2/listaraw.csv
由于
答案 0 :(得分:0)
如何使用json模块加载数据
不幸的是,您的数据无效json。属性名称必须有双引号。
这是一个修改过的例子
import json
data = """{
"geometry": {
"location": {
"lat": 48.121096,
"lng": 14.868725
}
},
"icon": "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
"id": "322572963ad2ccd534d8a6ec3e71eba67953400c",
"name": "McDonald's Osterreich",
"price_level": 1,
"reference": "CoQBeAAAAOQrvtFrvdPFavW8IPAtNz5BqUOxB6j0dAWXZzgx673-pYV-JLzDk4q9Q1lK2e1Tmn7xiGSwrOAT27rlnr00NJvskvS7isZOIz48RWv8SZo4jbl_RiiEfpz7SpD3fQNB31aJexfB6n2SsNz6FL8StgZIdErv6u4mR-a-xCbMU5CREhBB3r-DyRrOks1EPQz22JQXGhSmPRi0Ht5k0VPTAFVefDF0HQ3xZQ",
"types": ["restaurant", "food", "establishment"],
"vicinity": "Waidhofner Strasse 1, im City Center Amstetten"
}
"""
jdata = json.loads(data)
print jdata['geometry']['location']
答案 1 :(得分:0)
只需要将双引号替换为将评估为Python语法的内容。
此代码将检索您的坐标:
import ast
for line in open('listaraw.csv'):
line = ast.literal_eval(line.replace('""', '\\"'))
if isinstance(line, tuple):
items = map(ast.literal_eval, list(line))
else:
items = ast.literal_eval(line)
if isinstance(items, dict):
items = [items]
for item in items:
print item['geometry']['location']