Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何计算文件中的数字之和?_Python_Arrays_File_Calculation - Fatal编程技术网

Python:如何计算文件中的数字之和?

Python:如何计算文件中的数字之和?,python,arrays,file,calculation,Python,Arrays,File,Calculation,如何计算.txt文件中的数字总和 文件中的数据格式为: 7 8 14 18 16 8 23 ... 我从文件中读取数据,并将每一行的值分配给“line”vatiable,但我想得到如下结果:result=7+8+14+… f = open('data.txt', 'r') #LOOP AND READ DATA FROM THE FILE for line in f: code 这基本上只是创建一个数字列表,其中每一行都是列表中的一个新条目。然后显示列表的总和。这

如何计算.txt文件中的数字总和

文件中的数据格式为:

7
8
14
18
16
8
23
...
我从文件中读取数据,并将每一行的值分配给“line”vatiable,但我想得到如下结果:
result=7+8+14+…

f = open('data.txt', 'r')   #LOOP AND READ DATA FROM THE FILE
    for line in f:
        code

这基本上只是创建一个数字列表,其中每一行都是列表中的一个新条目。然后显示列表的总和。

这是我现在能想到的最简洁的代码: (最后更新为处理
n
,谢谢,@JonClements!)

对于您拥有的代码结构,您还可以执行以下操作:

f = open('data.txt', 'r')
ans = 0
for line in f:
    try:
        ans += int(line.strip())
    except ValueError:
        pass
编辑: 由于与“n”的混淆已经消除,第一个示例可以简单到

with open('file.txt', 'r') as fin:
    ans = sum(int(line) for line in fin)
甚至这一行:

ans = sum(int(line) for line in open('file.txt', 'r'))
但文件处理存在一定的风险,因此不强烈建议使用。

这里有一个解决方案(考虑到所有行都是数字):

在智能手机上

with open(filepath) as f:
    lines = f.readlines()
numbers = [int(line) for line in lines]
print(sum(numbers))

一个简单的解决方案是,根据steven和AChamp的建议,它还将处理每行末尾的\n

with open("abc.txt","r")as f:
    print(sum(int(x) for x in f))
保持简单:

with open('data.txt', 'r') as f:
    result = sum(map(int, f))


int
f
映射到每一行上,然后
sum()
将得到的整数相加。

您的意思是
int(line)
这不是
C
。是的!对不起,我的主要语言是C和C。这是正确的。OP没有指定如何处理该部件。在这里使用
if line.IsNumeric():
可能是一个潜在的解决方案。文件末尾的
'n'
会发生什么?(而且
对于fin
中的行就足够了,因为
fin
支持一个iterable接口。我没有注意到!@MurphyAdam你能解释一下吗?@0605002
。readlines()
将把所有行加载到内存中-你不需要这样做,因为你可以一边走一边对每行求和…另一部分是
int('n'))
将引发一个异常…您也不需要。strip as int无论如何都不会考虑前导/尾随空格…您可能只需要求和(如果line.strip().isdigit(),则fin中的行的int(line))就可以了(或.isnumeric(),具体取决于)@0605002关于你的第二个例子……我还想让它
除了ValueError
来捕捉
pass
语句应该处理的最小数量……如果发生键盘中断或
IOError
,你应该让它传播到能够处理它的东西,而不是吞下它。@StevenRumbalski正确更新我的答案谢谢!这正是我所需要的@Inder非常感谢。
for x in f
就足够了。类似文件的对象支持iterable接口。这可以让我写
打印(sum(map(int,f))
@MurphyAdam很高兴我能帮上忙:)@AChampion谢谢你提出的编辑建议,有适当的学分:)无需读入
数据
。只需在with语句下完成这一切:
即可用于f:…
中的行。也不需要
.strip()
,因为
int()
可以处理前导空格和尾随空格。我想计算所有数字的总和,“n”只是表示列表还在继续,7+8+14+-19-23…谢谢谢谢你,我不确定。我不得不与自动更正做很多斗争^^^谢谢你@Steven Rumbilski。但我得到了这个错误,并认为这是因为文件有多行要循环:以open('data.txt','r')作为fin:^SyntaxError:invalidsyntax@MurphyAdam当前位置我第二行忘记了一个右括号。这就是问题所在吗?不会是因为有多条线路
sum()
在所有行上驱动迭代(通过对
map()
的结果进行迭代间接实现)。Rumbilski是的,当然!我没有注意到。是的,这很简单,而且很有魅力^^再次感谢。
with open(filepath) as f:
    lines = f.readlines()
numbers = [int(line) for line in lines]
print(sum(numbers))
with open ('data.txt', 'r') as f:
    data = f.readlines()

sum = 0
for line in data:
    sum += int(line.strip())

print(sum)
with open("abc.txt","r")as f:
    print(sum(int(x) for x in f))
with open('data.txt', 'r') as f:
    result = sum(map(int, f))