输出总是显示为空列表

时间:2018-08-01 16:14:00

标签: python python-3.x

练习2:编写程序以查找以下形式的行:

New Revision: 39772

使用正则表达式和findall()方法从每一行中提取数字。

计算数字的平均值并打印出平均值。

输入文件为“ mbox-short.txt”。

import re
fname=input("enter the file name:")
fhandle=open(fname)
total=0
count=0
for x in fhandle:
    y=re.findall("^New Revision:(\s [0-9]*) ",x)         
    total=total+y
    count=count+1
print(y)
print("total and average is:",total,total/count)

任何人都可以建议如何将列表中的所有元素转换为浮点型

1 个答案:

答案 0 :(得分:1)

您的正则表达式结尾处有一个' ',这就是为什么它没找到任何东西的原因。

findall()开头的模式只会返回1次(或0次)命中-因为以^开头。

import re

fname=input("enter the file name:")
fhandle=open(fname)
total=0.0
count=0
for x in fhandle:
    y=re.findall(r"^New Revision:(\s*[0-9]*)",x)    # 0 or 1 hit  
    if y:  
        total += float(y [0] )               # to float if found 
        count += 1                           
print("total and average is:",total,total/count)

使用文本的示例:

t = """New Revision: 129
New Revision: 129
New Revision: 129
New Revision: 129
New Revision: 129
"""

import re 
total=0.0
count=0
for x in t.splitlines():
    y=re.findall("^New Revision:(\s*[0-9]*)",x)
    if y:
        total += float(y [0] )
        count += 1
print(y)
print("total and average is:",total,total/count)

输出:

total and average is: 645.0 129.0