用python提取文档内全部数字并求和

importrehand=open('sample.txt')numlist=list()forlineinhand:line=line.rstrip()stuff=re... import re
hand = open ('sample.txt')
numlist = list ()
for line in hand :
line = line.rstrip()
stuff = re.findall ('[0-9]+',line)
if len(stuff) != 1 :continue
num=float(stuff[0])
numlist.append(num)
b=int(sum(numlist))
print (b)
这是我写的程序,运行没有问题,但是求出来的加总数不对T T。求python大神帮忙看看哪里错误,如果程序不合理,应该是什么样的?
谢谢=3=
展开
 我来答
毫无威严雷米喵
2015-10-30 · TA获得超过428个赞
知道答主
回答量:29
采纳率:0%
帮助的人:44.1万
展开全部

因为不知道 "sample.txt" 的内容是什么格式,我猜是这样的问题:

stuff = re.findall ('[0-9]+',line)

的意思是将字符串 line 中的所有连续的数字找到,组成数组

当 line 中的内容存在不止一个数字的时候,例如:

123 234

时,stuff 的结果为:

['123', '234']

这样的数组,长度不为 1

这时,语句

if len(stuff) != 1 :continue

就会跳过这一循环,使得这行中的数字没有被加到总和中。


如果是这样的话,例子代码:

import re
digits_reg = re.compile(r'\d+')

with open('sample.txt', 'r') as file_handle:
    print sum(sum(map(int, digits_reg.findall(line))) for line in file_handle)

 

ps:

我猜你的语句

if len(stuff) != 1 :continue

是想要跳过没有数字的行,但是没有考虑多个数字的行,所以少加了

雁西楼
科技发烧友

2018-11-04 · 有一些普通的科技小锦囊
知道小有建树答主
回答量:1118
采纳率:73%
帮助的人:409万
展开全部

你这样只取到了每一行的第一组数字,并且只在它是一位数时才会被计算。

既然使用re,就不需要一行行去处理了,也不需要去空格了,只需要取出数字处理就好。

import re
nums = []
with open('_sumfile.txt', 'r') as f:
    for s in re.findall(r'\d+', f.read()):
        nums.append(float(s))
print(sum(nums))

_sumfile.txt的内容:

this is a test file.
3
5
can use 100?
over.

返回108.0

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mieyoubeizhuce
2015-10-30 · TA获得超过610个赞
知道小有建树答主
回答量:733
采纳率:100%
帮助的人:475万
展开全部
if len(stuff) != 1 :continue
是什么意思?放在这里起什么作用?
追问
和上一行stuff = re.findall ('[0-9]+',line)配合使用提取数字。我也试过把这行去掉,之后程序运行就出现问题了。
追答
你知道这行代码的逻辑吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式