我写了以下函数:
def read_data(filename):
lines = [line.strip() for line in open(filename)]
coordinates = [line.split(' ') for line in lines]
coordinates = [(float(c[0]), float(c[1])) for c in coordinates]
return tuple(coordinates)
读取并转换为元组this file,就好了。
带
coordinates = [(float(c[0]), float(c[1])) for c in coordinates]
ValueError: could not convert string to float:
为什么会出现此错误,以及在阅读problem0.dat时它出现的原因是什么?
答案 0 :(得分:2)
这条线路失败了:
82.0 7.0
以及具有两个相邻空白字符的任何其他行,因为您使用line.split(' ')
来分割每一行。当您使用' '
作为分隔符时,split
调用会返回['82.0', '', '7.0']
,这不是您想要的,并会破坏您的程序。您可以使用line.split()
来解决此问题,它将正确处理多个相邻的空白字符。
docs解释了这种行为:
str.split([sep [,maxsplit]])
如果给出了sep,则连续的分隔符不会组合在一起 被认为是划定空字符串(例如,'1,,2'.split(',') 返回['1','','2'])。 sep参数可能包含多个 字符(例如,'1<><><>>>>>'<>')返回['1','2', '3'])。返回使用指定分隔符拆分空字符串 [ '']。
...
如果未指定sep或为None,则进行不同的拆分 应用算法:连续空格的运行被视为a 单个分隔符,结果将不包含空字符串 如果字符串具有前导或尾随空格,则开始或结束。
第一个文件有效,因为它没有任何带有两个连续空格字符的条目。