第一次使用来自R的Python。我试图使用reverse-geocoder反转地理编码一批GPS坐标。问题是我似乎无法导入我的CSV文件。
我的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 :(得分: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页面以获取更多信息。
答案 1 :(得分: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]