从csv文件中提取信息

时间:2014-03-16 20:05:00

标签: python regex csv

我有来自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

由于

2 个答案:

答案 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']