2012-10-03 163 views
0

我需要編寫一個python腳本來合併文本文件(一行一個數字)中的十進制數字。我寫這個劇本:Python:TypeError:float()參數必須是一個字符串或數字

s = float() 
f = open('/home/ale/file_numbers', 'r').readlines() 
N = len(f)-1 
for i in range(0,N): 
    s += float(f) 

,但問題是在指令s += float(f) INFACT返回的錯誤是:

TypeError: float() argument must be a string or a number 

我無法弄清楚如何解決這樣的問題 什麼建議嗎?

+0

要添加到別人已經回答了,有一個你的代碼中有nother(邏輯)錯誤:'range(a,b)'返回從*到*但不包括* b的數字。所以'N = len(f)-1'應該是'N = len(f)'並不是說你應該這樣遍歷一個列表。 –

回答

1

想想readlines返回的是什麼。它不是一個字符串,它是一個字符串列表。

您需要以某種方式從文件中選擇一個字符串,或遍歷所有行。

s += float(f[0]) 
3

這將返回行列表(顧名思義):

open(...).readlines() 

但是你可以通過線路直接迭代:

s = float() 
f = open('/home/ale/file_numbers', 'r') 
for line in f: 
    s += float(line) 

而且,爲了以防萬一,如果你這樣做不是.close()開啓後您的文件,您可以使用此代碼:

s = float() 
with open('/home/ale/file_numbers') as f: 
    for line in f: 
     s += float(line) 

這是因爲:

  • with語句處理關閉文件時自動熄滅嵌套塊後,
  • 你可以簡單地通過打開的文件迭代,得到一個線(新行符號結束)每次迭代,
  • 默認modeopen()是「r」,這樣你就可以省略,
+1

不需要剝離'\ n','float()'照顧。 –

+0

@AshwiniChaudhary:好的,錯過了。謝謝。 – Tadeck

相關問題