1

蟒蛇问题:

with open(input, "rt") as f:
X = [map(float, line.split()) for line in f.readlines()[1:R]]  <<problem here
X = asarray(X, dtype=float) 

我有一个 .txt 文件,其中包含可以是分数或浮点数的数字。我在这里将它们作为浮点数数组读入我的代码中。但是,这只适用于浮点数。当您在我的输入文件中添加分数作为数字之一时,会发生错误。例如,我在文件中添加了 1/4 作为数字,得到以下信息。

     with open(input, "rt") as f:
--->     X = [map(float, line.split()) for line in f.readlines()[1:R]] 
         X = asarray(X, dtype=float)


ValueError: invalid literal for float(): 1/4. 

我该如何解决?(以便它可以读取分数和浮点数,并在读取它们时将这些分数转换为浮点数)

4

1 回答 1

4
>>> from fractions import Fraction
>>> [float(Fraction(x)) for x in '0.25 1/4'.split()]
[0.25, 0.25]

所以你需要

X = [[float(Fraction(x)) for x in line.split()] for line in f.readlines()[1:R]]

注意:为避免制作整个文件的临时列表,最好使用

from itertools import islice
with open(input, "rt") as f:
    X = [[float(Fraction(x)) for x in line.split()] for line in islice(f, 1, R)]
于 2013-10-24T04:18:31.203 回答