Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 索引超出列表中的范围_Python_List_Csv_Indexoutofrangeexception - Fatal编程技术网

Python 索引超出列表中的范围

Python 索引超出列表中的范围,python,list,csv,indexoutofrangeexception,Python,List,Csv,Indexoutofrangeexception,我有下面的python代码,它应该能够读取带有城市及其坐标的.csv文件。.csv文件的格式为: name,x,y name,x,y name,x,y 但是,我在第764行得到错误“列表索引超出范围”: 758 """function to calculate the route for files in data folder with coordinates""" 759 start_time = time.time()

我有下面的python代码,它应该能够读取带有城市及其坐标的.csv文件。.csv文件的格式为:

name,x,y
name,x,y
name,x,y 
但是,我在第764行得到错误“列表索引超出范围”:

 758 """function to calculate the route for files in data folder with coordinates"""
 759 start_time = time.time()
 760 f = open(csv_name, "r")
 761 f.readline()
 762 f.readline()
 763 f.readline()
 764 lines = int(f.readline().split()[2])
 765 f.readline()
 766 f.readline()

该文件大约有50行。是什么导致了问题?谢谢

如果程序正在读取的特定行不包含任何空格,则调用

f.readline().split()
会回来的

['name,x,y']
因此唯一可用的索引是
0

我相信您要做的是用逗号分割每个字符串,如果是这样的话:

f.readline().split(',')
将执行此操作。

代码,
f.readline()
返回一个字符串,拆分它将返回从readline()函数获得的唯一字符串的列表

例如:

f=open('property.csv', "r")
f.readline()
lines = f.readline().split()
print(lines)
输出:['1000104,PUTNAM,Y,3,2100']

另外,
f.readline().split()[0]
会将10001000104,PUTNAM,Y,3,2100作为字符串。 因此,
f.readline().split()
将只有一个字符串类型的元素。要将字符串分隔为csv文件的列,请使用逗号作为分隔符拆分字符串。在您的情况下,将第764行替换为以下内容:

lines=int(f.readline().split(',')[2])

请注意:这是索引超出范围错误,因为代码试图访问列表中只有一个元素作为字符串的第二个元素。

您应该在
split
命令中声明分隔符。您可以将其更改为
split(',')
,以便使用逗号作为分隔符拆分该行。假设该行没有拆分为3个部分,或者您到达文件末尾,并且readline返回了一个空字符串?我刚刚这么做了。拆分(',')。它给了我同样的错误,尽管现在它给了我“Read'cities.csv':1/2801行”,并且立即又出现了错误。@KoralpCatalsakal是对的。在python shell中尝试
“name,x,yz”.split()
。您将得到一个包含单个项目的列表。而
help(str.split)
非常有用,因为它告诉您所有参数:sep;None(默认值)表示根据任何空格进行拆分,并从结果中丢弃空字符串。您可以说这是一个名为x,y的文件,但随后丢弃了几行,然后得到一行,该行显然在拆分字符串的第三个位置有行数。。。暗示这毕竟不是名称,x,y。您可以在处理之前读取并打印该行,以查看它是什么:
line=f.readline();打印(报告(行));lines=int(line.split()[2])
。这会打印出你得到的结果,这样你就可以看到拆分是否正确。我尝试过这样做,但后来出现了另一个错误:tmp=City(“C”+str(C[0]),float(C[1]),float(C[2])。我认为这与分裂有关。。。