将带有字符串的文件转换为浮点数然后添加它们

时间:2016-02-23 00:13:12

标签: python bioinformatics

我必须为我的类创建一个程序来读取文件,将其中的数字列表转换为浮点数,然后将它们全部加在一起并仅将答案打印到屏幕上。

我得到的最远的是:

fname = sys.argv[1]
handle = open(fname, "r")
total = 0
for line in handle:
     linearr = line.split()
     for item in linearr:
          item = float(item)

其中一个文件如下:

0.13    10.2    15.8193
0.09    99.6
100.1
100.2   17.8    56.33    12
19e-2   7.5

尝试将转换后的列表添加到总计(总计+ =项目)无效。我真的输了,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你快到了。 total += item是正确的方法,在转换为浮动后将该行添加到for循环中。

请务必使用print(total)打印结果,您可能也忘了这一点。

对于您的测试文件,这给我的结果是419.9593

答案 1 :(得分:1)

您可以将生成器表达式sum一起使用,将行拆分为列表并将每个子元素转换为float:

In [9]: cat test.txt
0.13    10.2    15.8193
0.09    99.6
100.1
100.2   17.8    56.33    12
19e-2   7.5

In [10]: with open("test.txt") as f:
            sm = sum(float(s) for row in map(str.split, f) for s in row)
   ....:     

In [11]: sm
Out[11]: 419.9593

您还可以与itertools.chain合并以展平行:

In [1]: from itertools import  chain

In [2]: with open("test.txt") as f:
            sm = sum(map(float, chain(*(map(str.split,f)))))
   ...:     

In [3]: sm
Out[3]: 419.9593

在旁注中,您应始终使用with打开文件,它会自动为您关闭文件。