将包含字符串的文件转换为浮点数然后添加它们
Converting a File with Strings into Floats then Adding Them
我必须为我的 class 创建一个程序来读取一个文件,将其中的数字列表转换为浮点数,然后将它们全部相加并只将答案打印到屏幕上。
我走得最远的是:
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
尝试将转换后的列表添加到总计(总计 += 项目)没有成功。我真的迷路了,非常感谢任何帮助。
你快到了。 total += item
是正确的方法,在转换为 float 后将该行添加到 for
循环中。
确保在最后用 print(total)
打印你的结果,你可能也忘记了。
对于你的测试文件,这给了我结果 419.9593
您可以将 生成器表达式 与 sum
一起使用,将行拆分为列表并将每个子元素转换为浮点数:
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
打开文件,它会自动为您关闭文件。
我必须为我的 class 创建一个程序来读取一个文件,将其中的数字列表转换为浮点数,然后将它们全部相加并只将答案打印到屏幕上。
我走得最远的是:
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
尝试将转换后的列表添加到总计(总计 += 项目)没有成功。我真的迷路了,非常感谢任何帮助。
你快到了。 total += item
是正确的方法,在转换为 float 后将该行添加到 for
循环中。
确保在最后用 print(total)
打印你的结果,你可能也忘记了。
对于你的测试文件,这给了我结果 419.9593
您可以将 生成器表达式 与 sum
一起使用,将行拆分为列表并将每个子元素转换为浮点数:
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
打开文件,它会自动为您关闭文件。