5

对所有人:

我很好奇是否有人可以帮助我理解错误:ValueError:float()的无效文字。当我将文本文件传递给列表然后尝试将此列表转换为浮点值时,我得到了这个。

a = open("input.txt","r")
lines = a.readlines()
b = map(float, lines)

奇怪的是,至少对我来说,当我处理时:

print repr(lines[0])

我得到:

'0.000\t0.000...\t0.000\t0.000\n'

print type(lines[0])

我得到:

<type 'str'>

因此,我不明白为什么 map(float,lines) 不能正常工作。我是否错误地使用了此功能?查看文档,map 函数给出为:map(function, iterable, ...)。列表不是可迭代的吗?

此外,如果有人可以解释这个错误/指向我解释这个错误的方向,我将不胜感激。

提前感谢您对这个问题的帮助。

4

3 回答 3

7

在这种情况下,您不需要 readlines - 这是浪费时间和内存。

如果你想要一个浮动列表的列表:

b = [[float(v) for v in line.rstrip('\n').split('\t')] for line in a]

或者只是一大堆花车:

b = [float(v) for line in a for v in line.rstrip('\n').split('\t')]
于 2011-11-02T21:26:25.413 回答
2

a.readlines()是字符串列表,因此您尝试float('0.000\t0.000\t0.000\t0.000\n')在地图中进行转换,这解释了您看到的错误。

您需要进行更多处理(请参阅内联注释):

>>> x = '0.000\t0.000\t0.000\t0.000\n'
# To simulate a.readlines()' list
>>> lines = [x,]
>>> 

# Strip the newline, and separate the values based on the tab control character.
>>> lines_values = map(lambda l: l.strip().split('\t'), lines)
>>> lines_values
[['0.000', '0.000', '0.000', '0.000']]

# For each value in in the list of lines' values, convert from string to a float.
>>> values_float = [map(float, v) for v in values]
>>> values_float
[[0.0, 0.0, 0.0, 0.0]]
于 2011-11-02T19:53:42.870 回答
2

来自字符串中ValueError\t字符。在单独转换每一行之前,您必须将每一行拆分为单独的列。

>>> lines = ['0.000\t1.000\t2.000\n', '3.000\t4\t5.0\n']
>>> [[float(val) for val in line.strip().split('\t')] for line in lines]
[[0.0, 1.0, 2.0], [3.0, 4.0, 5.0]]
于 2011-11-02T19:54:46.800 回答