繁体   English   中英

在Python 3.5中导入CSV文件时出现索引错误

[英]Index Error when Importing A CSV File in Python 3.5

第一次使用来自R的Python。我正在尝试使用反向地理编码器对一批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

这: csv.reader(open(input_filename,'rt'),delimiter='\\t')使用制表符分隔符打开文件,而您的文件以逗号分隔。

删除delimiter参数: csv.reader(open(input_filename,'rt')) ,代码应恢复为默认逗号。

还要注意,文件中的任何空白行也会产生IndexError 最后一行之后有CR/LF是造成混乱的常见原因(不止一次让我失望)。

有关更多信息,请参见csv.reader和“ 方言和格式参数”页面。

好吧,这里至少有两件事。

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

与您的csv文件不对应,因为分隔符很明显,而不是tab

因此,该行应为:

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

第二个问题是您的csv文件具有用引号引起来的行,但是您根本没有将此信息传递给您的阅读器,这仍然会导致索引错误,因为csv阅读器会将所有用引号引起来的内容解释为单个字段。 约定是引用字段,据我所知不是行。 一种解决方案(尽管我敢肯定不是最优雅的)是通过添加quoting=csv.QUOTE_NONE参数来忽略引号,然后在使用结果之前从结果中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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM