如何匹配csv中的两列?

时间:2014-11-05 06:32:56

标签: python csv

我有两个CSV文件。一个包含City,Lat,Long,另一个包含City对,即City1,City2。我必须计算这些城市对之间的距离。

City_pair.csv第一个csv文件

City1,City2
Mumbai,Bengaluru
Delhi,Mumbai
Bengaluru,Delhi

Lat_long.csv第二个csv文件

City,Lat,Long
Mumbai,19.1195,72.8469
Bengaluru,13.0046,77.6351
Delhi,28.714,77.1673

为此,我必须从lat_long.csv文件中获取每个城市的纬度,以便在city_pair.csv中每次出现它,然后将其提供给osrm api。

现在我无法拿起与城市相对应的纬线。以下是我尝试过的内容:

def distance():
global latitude1,latitude2,longitude1,longitude2
with open('city_pair.csv') as fin1,\
     open('lat_long.csv') as fin2:

    reader1 = DictReader(fin1)
    reader2 = DictReader(fin2)

    for line2 in reader2:
        outline = dict(line2)
        fin1.seek(0) # resets the reader1 iterator
        for line1 in reader1:
            if line1['City1'] in line2['City'].lower():
                latitude1 = line2['Lat']
                longitude1 = line2['Long']
                orig_coord= latitude1, longitude1
            if line1['City2'] in line2['City'].lower():
                latitude2 = line2['Lat']
                longitude2 = line2['Long']
                dest_coord = latitude2, longitude2
            print latitude1,longitude1        
            url = "http://localhost:5000/viaroute?loc="+str(latitude1)+","+str(longitude1)+"&loc="+str(latitude2)+","+str(longitude2)
            result= simplejson.load(urllib.urlopen(url))
            driving_time = result['route_summary']['total_time']
            driving_distance = result['route_summary']['total_distance']
            print "Distance between"+line1['City1']+"to"+line1['City2']+ " = "+driving_distance
            print "Travel Time between"+line1['City1']+"to"+line1['City2']+ " = "+driving_time

2 个答案:

答案 0 :(得分:2)

我只需要通过lat_long.csv一次,然后将所有数据转储到dict中。然后你就可以更快更容易地访问它。

请注意,您当前的解决方案是丑陋的,O(n ^ 2)vs转储到dict,然后访问has表以获取lats和longs只有O(n)

答案 1 :(得分:0)

使用以下代码获取所有城市lat&长到字典然后用你的代码来计算城市之间的距离。

import csv

with open('lat_long.csv', 'rb') as src_file:
csv_file = csv.reader(src_file)
lat_long_dict = {}
for row in csv_file:
    lat_long_dict[row[0]] = [row[1], row[2]]