【问题标题】:Python: How do I calculate the sum of numbers from a file?Python:如何计算文件中数字的总和?
【发布时间】:2018-08-17 19:28:56
【问题描述】:

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

文件中的数据格式为:

7
8
14
18
16
8
23
...

我从文件中读取数据并将每一行值分配给'line'变量,但我想得到类似:result = 7+8+14+...

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

【问题讨论】:

  • 我想计算所有数字的总和,'n'只是表示列表继续,7+8+14+-19-23 ...谢谢

标签: python arrays file calculation


【解决方案1】:

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

with open('file.txt', 'r') as fin:
    ans = sum(int(line) for line in fin if line.strip().isnumeric())

对于您拥有的代码结构,您也可以这样做:

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'))

但文件处理存在一定风险,不强烈推荐。

【讨论】:

  • 文件末尾的'n' 会发生什么情况? (而for line in fin 就足够了,因为fin 支持可迭代接口。
  • 没注意到! @MurphyAdam 你能解释一下吗?
  • @0605002 .readlines() 会将所有行加载到内存中-您不需要这样做,因为您可以随时对每一行求和...另一部分是int('n')将引发异常...
  • 您也不需要 .strip,因为 int 无论如何都不会考虑前导/尾随空格...您可能只需 sum(int(line) for line在 fin if line.strip().isdigit()) (或 .isnumeric() 取决于)
  • @0605002 关于你的第二个例子......我也会让except ValueError 只捕获pass 语句应该处理的最少数量......如果键盘中断或@ 987654333@ 发生......你应该让它传播到可以处理它而不是吞下它的东西。
【解决方案2】:

保持简单:

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

intf 映射到每一行,然后sum() 将结果整数相加。

【讨论】:

  • 谢谢@Steven Rumbilski。但是我收到此错误并认为这是因为文件有多行要循环: with open('data.txt', 'r') as fin: ^ SyntaxError: invalid syntax
  • @MurphyAdam:我忘记了第二行的右括号。那是问题吗?不会是因为多行。 sum() 驱动对所有行的迭代(间接通过迭代 map() 的结果)。
  • Rumbilski 是的,当然!没有关注它。是的,这更简单,就像一个魅力^^再次感谢。
【解决方案3】:
file = open("data.txt", "r")
numbers = []

for line in file:
  numbers.append(int(line))

print(sum(numbers))

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

【讨论】:

  • 你的意思是int(line)这不是C
  • 是的!抱歉,我的主要语言是 C 和 C#。
  • 没错。 OP 没有指定如何处理该部分。在这里使用if line.IsNumeric(): 可能是一个潜在的解决方案。
【解决方案4】:

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

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

【讨论】:

  • @StevenRumbalski 绝对正确更新我的答案
  • 谢谢!这正是我需要@Inder 非常感谢的。
  • for x in f 就足够了。类文件对象支持可迭代接口。我可以写print(sum(map(int, f)))
  • @MurphyAdam 很高兴我能帮上忙 :)
  • @AChampion 感谢您提出修改建议,并附上应得的学分:)
【解决方案5】:

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

def calculate_number_in_file(file_path):
    with open(file_path, 'r') as f:
        return sum([int(number.strip()) for number in f.readlines()])

【讨论】:

    【解决方案6】:
    with open ('data.txt', 'r') as f:
        data = f.readlines()
    
    sum = 0
    for line in data:
        sum += int(line.strip())
    
    print(sum)
    

    【讨论】:

    • 无需读入data。只需在您的 with 语句下完成所有操作:for line in f: ...。也不需要.strip(),因为int() 可以处理前导和尾随空格。
    【解决方案7】:

    在智能手机上...

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

    【讨论】:

    • 谢谢,我不确定。而且我不得不与自动更正进行很多斗争^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    相关资源
    最近更新 更多