2013-06-09 5 views
1

Я пытаюсь найти более быстрый способ найти ближайший матч Latitude & Долгота в списке Lat/Longs из массивного файла, где мне нужно откройте файл csv, преобразуйте его в правильный формат. Выберите столбцы, на которых расположены мои lat и long, и затем подключите их к моему eqation ... если он работает. Это то, что я до сих пор ... Я постоянно получаюНайти ближайший матч Latitude & Longitude в списке Lat/Longs python

TypeError:float object is not subscriptable

def menu3(data): 
    lat2 = 47.488611 
    long2 = -117.578611 
    data = open('eqdata.csv', 'r') 
    reader = data.readlines() 
    for line in reader: 
     lat1 = line[4] 
    for line in reader: 
     long1 = line[5] 
    for ix in range(len(long1)): 
     lat1[ix][5]=int(long2[ix][5]) 

    for ix in range(len(lat1)): 
     lat1[ix][4]=int(lat1[ix][4]) 

    distance =int((lat2-lat1)**2)**.5+int((long2-long1)**2) 
    distanceSq = distance**2 
    print (distanceSq) 

ответ

1

reader = data.readlines() читает все строки файла в список строк.

Этих строки:

for line in reader: 
    lat1 = line[4] 

Присвоить lat1 на 5-й символ каждой строки ... но это не петли до последней строки, в результате чего lat1 является пятым символом последней строки в файле .. возможно, не то, что вы хотите.

Это даже не похоже, код, который дает это сообщение об ошибке, потому что данный входной файл следующую строку:

lat1[ix][5]=int(long2[ix][5]) 

С lat1 это один символ, должен дать:

IndexError: string index out of range 

long2 - это значение поплавка, присвоенное ранее, поэтому его индексирование также потерпит неудачу.

Обновите свой вопрос с помощью фактического источника, образца ввода и полной трассировки сообщения об ошибке, чтобы получить лучшую помощь.

Существует также модуль csv, который помогает обрабатывать файлы .csv, но все же нужен некоторый образец ввода.

Также я предлагаю использовать отладчик или, по крайней мере, некоторые операторы печати, чтобы увидеть, что делают ваши переменные.

Смежные вопросы