2017-02-21 8 views
0

Первый раз использовать Python, исходящий из R. Я пытаюсь изменить геокодирование партией координат GPS с помощью reverse-geocoder. Проблема в том, что я не могу импортировать свой CSV-файл.Ошибка индекса при импорте файла CSV в Python 3.5

Мой файл CSV выглядит следующим образом:

"lat,lon" 
"14.5553,121.01806" 
"14.60584,120.99963" 
"14.5625,121.02938" 

Код, который я в основном просто копировать-вставить:

import csv 
input_filename = '/Users/FreeSys/desktop/pyrevtest.csv' 
output_filename = '/Users/FreeSys/desktop/pyrevtestcoded.csv' 
cities = [(row[0],row[1]) for row in csv.reader(open(input_filename,'rt'),delimiter='\t')] 

pp.pprint(cities[0:5]) 

IndexError        Traceback (most recent call last) 
<ipython-input-8-317fda8cb105> in <module>() 
     2 input_filename = '/Users/FreeSys/desktop/pyrevtest.csv' 
     3 output_filename = '/Users/FreeSys/desktop/pyrevtestcoded.csv' 
----> 4 cities = [(row[0],row[1]) for row in csv.reader(open(input_filename,'rt'),delimiter='\t')] 

<ipython-input-8-317fda8cb105> in <listcomp>(.0) 
     2 input_filename = '/Users/FreeSys/desktop/pyrevtest.csv' 
     3 output_filename = '/Users/FreeSys/desktop/pyrevtestcoded.csv' 
----> 4 cities = [(row[0],row[1]) for row in csv.reader(open(input_filename,'rt'),delimiter='\t')] 

IndexError: list index out of range 

ответ

0

Это: csv.reader(open(input_filename,'rt'),delimiter='\t') открывает файл с помощью вкладки разделитель, в то время как ваш файл разделенных запятой.

Удалите аргумент delimiter: csv.reader(open(input_filename,'rt')), и код должен вернуться к запятой по умолчанию.

Обратите внимание, что любые пустые строки в вашем файле также будут давать IndexError. Наличие CR/LF после последней строки является обычной причиной путаницы (это меня больше не раз ломало).

См. csv.reader и dialects-and-formatting-parameters страниц для получения дополнительной информации.

0

Ну, здесь есть как минимум две вещи.

csv.reader(open(input_filename,'rt'),delimiter='\t') 

не соответствует файлу CSV, так как ваш разделитель явно , и не tab.

Так что линия должна быть:

csv.reader(open(input_filename,'rt'),delimiter=',') 

Вторая проблема в том, что ваш файл CSV имеет строки заключены в кавычки, но вы не передавая эту информацию к вашему читателю вообще, что будет по-прежнему приводить к индексу ошибка, поскольку считыватель csv интерпретирует все, заключенное в кавычки, как одно поле. Соглашение состоит в том, чтобы указывать поля, а не строки, насколько я знаю. Одно из решений (хотя я уверен, что не самый изящный) состоит в том, чтобы игнорировать кавычки, добавив параметр quoting=csv.QUOTE_NONE, а затем удалите символы кавычек из результатов, прежде чем использовать их:

cities = [(row[0].strip("),row[1].strip(")) for row in csv.reader(open(input_filename,'rt'),delimiter=','), quoting=csv.QUOTE_NONE]