如何将文本文件中的所有数字相加?

时间:2016-02-24 01:43:18

标签: python file

我必须计算文件中任何数字的总和并打印总和。

数字定义为以数字0到9开头的任何字符串,后跟任意数字的数字0到9.

字母数字字符串(包括数字和字母的字符串)不包括在总和中。

这是文件的内容:

strlen(a)

所以在这种情况下答案是115。

3 个答案:

答案 0 :(得分:2)

您需要做的就是使用item.isnumeric()。如果该项目仅由数字而非字母或其他字符组成,则它将返回true。

因此,您检查wordList中的所有项目以及项目isnumeric()是否已将项目添加到total

infile = open(filename.txt, 'r')
content = infile.read()       
infile.close()

wordList = content.split()    
total = 0

for item in wordList:
    if item.isnumeric():
        total += int(item)

答案 1 :(得分:1)

我建议使用RegEx:

import re

with open('file') as f:
    print(sum(int(i) for i in re.findall(r'\b\d+\b', f.read())))

在这种情况下:

  • \b+匹配所有数字,\b检查数字之后(或之前)是否有字母,以便我们可以忽略abcd79kk

  • re.findall()尝试查找文件中的所有数字,使用RegEx \b\d+\b并返回一个列表。

  • 列表压缩int(i) for i in re.findall(r'\b\d+\b'),将re.findall()返回的列表中的所有元素转换为int个对象。

  • sum()内置函数对列表的元素求和,并返回结果。

Online RegEx demo

答案 2 :(得分:-3)

def function():

    infile = open("test.txt", 'r')
    content = infile.read()       
    infile.close()
    wordList = content.split()

    total = 0

    for i in wordList:
        if i.isnumeric():
            total += int(i)
    return total

在此解决方案中,我将文件命名为test.txt。这个想法是你循环遍历wordList,这是一个包含test.txt中拼接的每个项目的列表(尝试在循环之前打印wordList以便自己查看)。然后我们尝试将每个项目转换为int(假设文件中没有小数,如果是,则可以包含浮点数)。然后我们捕获ValueError,它在转换时被引发,即'a'作为int。