2013-10-24 30 views
0

Python的問題編號:的Python:閱讀文件,是分數或浮動治療如浮點數

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. 

我該如何解決這個問題? (所以它可以讀取分數和浮點數和閱讀它們時,這些分數也轉換成浮動)

回答

3
>>> 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)]