2014-11-05 48 views
0

我有兩個CSV文件。其中一個包含City,Lat,Long,另一個包含City對,即City1,City2。我必須計算這些城市對之間的距離。如何匹配csv中的兩列?

City_pair.csv 1 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網每個城市的距離爲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

我只會經過lat_long.csv一次並將所有數據首先轉儲爲字典。那麼你將能夠更快,更容易地訪問它。

注意,目前的解決方案是醜陋和爲O(n^2)對傾銷與dict,然後訪問具有表讓拉特和多頭只有O(n)的

+0

謝謝,建議。現在正在工作。 – Rahul 2014-11-05 08:20:54

0

使用下面的代碼來獲取所有城市經緯度&長成字典,然後使用您的代碼來計算城市之間的距離。

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]]