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

2024-04-25 03:55:22 发布

您现在位置:Python中文网/ 问答频道 /正文

第一次使用来自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

Tags: csvinforinputoutputopenfilenameusers
2条回答

嗯,这里至少有两件事。你知道吗

 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]

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

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

还要注意,文件中的任何空行也将产生IndexError。在最后一行后面有一个CR/LF是造成混乱的常见原因(我不止一次被发现)。你知道吗

csv.readerdialects-and-formatting-parameters页了解更多信息。你知道吗

相关问题 更多 >