2012-10-03 108 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

相关问题