此问题的基本要点是读取文件,使用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)
答案 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