用re计算一个文本文件中的所有数字?

时间:2018-07-31 01:30:53

标签: python regex

我了解RE的基础知识,我需要打开一个包含很多行的文件,只取数字并显示平均值。这是我可怜的尝试:

import re

try:
    ufile = open(input('What file are you using? '))
except:
    print('File don\'t founded.')
    exit()

lnumbers = []

for line in ufile:
    numbers = re.findall('([0-9.]+) ', line)
    if len(numbers) > 0:
        lnumbers.append(numbers)

我不知道下一步该怎么做。

3 个答案:

答案 0 :(得分:0)

假设给定的数字永远不会从一行到另一行换行,那么对您的代码进行一点修改就可以了:

for line in ufile:
    numbers = re.findall('[0-9]+(\.[0-9]+)?', line)
    for number in numbers:
        lnumbers.append(numbers)

if len(lnumbers) > 0:
    print sum(lnumbers) / len(lnumbers)
else:
    print "no numbers were found"

答案 1 :(得分:0)

您可以使用以下列表推导来解析文件中的所有数字,然后根据新列表计算平均值。

lnumbers = [float(number) for line in ufile for number in re.findall('\d+(?:\.\d*)?', line)]
print(sum(lnumbers) / len(lnumbers))

答案 2 :(得分:0)

使用map + sum

import re
from statistics import mean

try:
    ufile = open(input('What file are you using? '))
except:
    print('File don\'t founded.')
    exit()

print(mean(sum(list(map(lambda line: list(map(int,re.findall('\d',line))),ufile)),[])))