python 正则表达式提取数字并求和?

nikitazhaohy 发布于 2016/06/01 11:10
阅读 2K+
收藏 1

烦请各位帮忙:

将如下一段话中的数字全部提取出来并求和:

sample.txt

Why should you learn to write programs? 7746
12 1929 8827
Writing programs (or programming) is a very creative 
7 and rewarding activity.  You can write programs for 
many reasons, ranging from making your living to solving
8837 a difficult data analysis problem to having fun to helping 128
someone else solve a problem.  This book assumes that 
everyone needs to know how to program ...
我自己写的代码如下:

import re
name = raw_input('Enter file name:')
if len(name) < 1 : name = 'sample.txt'
fhand = open(name)

numlist = list()
for line in fhand :
    line = line.rstrip()
    stuff = re.findall('[0-9]+',line)
    if len(stuff) < 1 : continue
    num = int(stuff) #因为有的行包含不止一个数字,提取出来的数字有些是list,因此也没办法转化成int,后续代码也就无法完成。求指导!
    numlist.append(num)
print sum(numlist)



最终的结果应该是 27486。

请各位帮忙修改,谢谢!!

加载中
1
Feng_Yu
Feng_Yu
$ ipython3
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
Type "copyright", "credits" or "license" for more information.

IPython 1.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import re

In [2]: txt = '''Why should you learn to write programs? 7746
   ...: 12 1929 8827
   ...: Writing programs (or programming) is a very creative 
   ...: 7 and rewarding activity.  You can write programs for 
   ...: many reasons, ranging from making your living to solving
   ...: 8837 a difficult data analysis problem to having fun to helping 128
   ...: someone else solve a problem.  This book assumes that 
   ...: everyone needs to know how to program ...'''

In [3]: re.fin
re.findall   re.finditer  

In [3]: help(re.findall)


In [4]: re.findall(r'\d+', txt)
Out[4]: ['7746', '12', '1929', '8827', '7', '8837', '128']

In [5]: result_list = re.findall(r'\d+', txt)

In [6]: num_list = [int(num) for num in result_list]

In [7]: num_list
Out[7]: [7746, 12, 1929, 8827, 7, 8837, 128]

In [8]: sum(num_list)
Out[8]: 27486

In [9]:



nikitazhaohy
nikitazhaohy
太牛太牛了,又学会了一招 r' \d+' 非常感谢!!!!!
返回顶部
顶部