使用Python导入CSV(查找表)并将GPS坐标添加到另一个输出CSV

时间:2010-08-06 14:30:03

标签: python dictionary csv gps geocoding

所以我已经导入了一个包含3000个元素的XML-ish文件,并将它们解析为CSV输出。但我还需要导入第二个CSV文件,其中'keyword','latitude','longitude'作为列,并使用它将GPS坐标添加到第一个文件的其他列。

阅读python教程,似乎{词典}就是我所需要的,尽管我在这里读到元组可能更好。我不知道。

但无论如何 - 我从:

开始
    floc = open('c:\python\kenya_location_lookup.csv','r')
    l = csv.DictReader(floc)
    for row in l: print row.keys()

输出如下:

{'LATITUDE':' - -1.311467078','LONGITUDE':'36 .77352011','KEYWORD':'Kianda'} {'LATITUDE':' - -1.315288401','LONGITUDE':'36 .77614331','KEYWORD':'Soweto'} {'LATITUDE':' - -1.315446430425027','LONGITUDE':'36 .78170621395111','KEYWORD':'Gatwekera'} {'LATITUDE':' - -1.3136151425171327','LONGITUDE':'36 .785863637924194','KEYWORD':'Kisumu Ndogo'}

我是新手(而不是程序员)。问题是如何使用键来取出相应的行数据并将其与另一组中元素正文中的单词进行匹配?

3 个答案:

答案 0 :(得分:1)

  

阅读python教程,似乎   喜欢{dictionary}就是我所需要的,   虽然我在这里读到了元组   可能会更好。我不知道。

他们都是完成这项任务的好选择。

  

print row.keys()输出外观   像:

     

{'LATITUDE': '-1.311467078',

不,不!这是print row的输出,绝对是 NOT print row.keys()。请不要在你的问题中提供虚假信息,这使得它们很难有效地回答(新手没有区别:当然你可以检查你提供的输出实际上来自你提供的代码!)。

  

我是新手(而不是程序员)。   问题是如何使用密钥   拔出相应的行数据   并将其与身体中的单词相匹配   另一组中的元素?

由于你绝对没有给出关于“另一套”结构的零信息,你当然不可能回答这个问题。疯狂地猜测,例如,如果“另一组”中的条目也是dict,每个条目都有一个KEYWORD的键,你想先建立一个辅助字典,然后合并(一些)它的条目在“其他集”中:

l = csv.DictReader(floc)
dloc = dict((d['KEYWORD'], d) for d in l)
for d in otherset:
  d.update(dloc.get(d['KEYWORD'], ()))

当CSV中相应的关键字条目中没有该位置时,这将使该位置丢失 - 如果这是一个问题,您可能希望使用“假位置”字典作为缺失条目的默认值而不是我在最后一个陈述中()。但是,无论如何,这都是疯狂的猜测,因为你的Q中缺少信息。

答案 1 :(得分:0)

如果您将DictReader转储到列表(data = [row for row in csv.DictReader(file)])中,并且每行都有唯一的关键字,请将该字典列表转换为字典字典,并使用该关键字作为关键字。

>>> data = [row for row in csv.DictReader(open('C:\\my.csv'),
...                                       ('num','time','time2'))]
>>> len(data)  # lots of old data :P
1410
>>> data[1].keys()
['time2', 'num', 'time']
>>> keyeddata = {}
>>> for row in data[2:]:  # I have some junk rows
...     keyeddata[row['num']] = row
...
>>> keyeddata['32']
{'num': '32', 'time2': '8', 'time': '13269'}

将关键字拉出后,您可以遍历其他列表,从中获取关键字,并将其用作纬度/经度列表的索引。从该索引中拉出lat / long并将其添加到另一个列表中。

答案 2 :(得分:0)

谢谢 -

Alex:我的另一组代码正在运行,唯一相关的部分是我有一个字符串,可能包含也可能不包含此词典中的'keyword'。

从结构上讲,这就是我组织它的方式:

def main():
    f = open('c:\python\ggce.sms', 'r')
    sensetree = etree.parse(f)
    senses = sensetree.getiterator('SenseMakingItem')
    bodies = sensetree.getiterator('Body')       
    stories = []
    for body in bodies:
            fix_body(body)
            storybyte = unicode(body.text)
            storybit = storybyte.encode('ascii','ignore')
            stories.append(storybit)
    rows = [ids,titles,locations,stories]
    out = map(None, *rows)
    print out[120:121]
    write_data(out,'c:\python\output_test.csv')

(我省略了获取其标题,位置的代码,因为它们有效并且不会用于从故事中的数据中获取真实位置)

希望这有帮助。