如何使用re.findall()从文本文件中提取所有数字并使用for循环计算总和?

时间:2019-02-21 04:07:04

标签: python

此问题的基本要点是读取文件,使用re.findall()查找整数,查找[0-9]+的正则表达式,然后将提取的字符串转换为整数并求和。我有不同的结果,应该以(209)结尾。另外,如何简化我的代码?谢谢(这是txt文件http://py4e-data.dr-chuck.net/regex_sum_167791.txt

import re
hand = open("regex_sum_167791.txt")
total = 0
count = 0
for line in hand:
   count = count+1
   line = line.rstrip()
   x =  re.findall("[0-9]+", line) 
   if len(x)!= 1 : continue
   num = int(x[0])
   total = num + total
print(total)

2 个答案:

答案 0 :(得分:3)

假设您需要对txt中的所有数字求和:

total = 0
with open("regex_sum_167791.txt") as f:
    for line in f:
        total += sum(map(int, re.findall("\d+", line)))
print(total)
# 417209

逻辑

首先,请在执行with时尝试使用open,以便一旦完成任何工作,open就会关闭。

以下几行看起来很多余,因此被删除:

  • count = count+1:未使用。
  • line = line.rstrip()re.findall负责提取,因此您不必担心剥离行。
  • if len(x)!= 1 : continue:似乎您想跳过没有数字的行。但是由于sum(map(int, re.findall("\d+", line)))在这种情况下返回零,因此这也是不必要的。

  • num = int(x[0]):最后,这实际上仅从行中获取一位。如果在一行中找到两个或两个以上的数字,这将无法达到最初的目的。而且由于int无法直接应用于可迭代对象,因此我使用了map(int, ...)

答案 1 :(得分:0)

您快到了:

import re
hand = open("regex_sum_167791.txt")
total = 0

for line in hand:
    count = count+1
    line = line.rstrip()

    x =  re.findall("[0-9]+", line) 

    for i in x:
        total += int(i)

print(total)

答案:417209