从文本文件转换为元组间歇性运行

时间:2014-06-11 02:39:33

标签: python python-2.7

我写了以下函数:

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,就好了。

但是,它在this filethis one上失败。

coordinates = [(float(c[0]), float(c[1])) for c in coordinates]
ValueError: could not convert string to float:

为什么会出现此错误,以及在阅读problem0.dat时它出现的原因是什么?

1 个答案:

答案 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   单个分隔符,结果将不包含空字符串   如果字符串具有前导或尾随空格,则开始或结束。

第一个文件有效,因为它没有任何带有两个连续空格字符的条目。