繁体   English   中英

在 Python 中获取字符串中的数字

[英]Get number in string in Python

我有一个如下所示的日志文件(只给出了一个子集):

isp:29.455.3.53
completed in 24ms (Count: 34, DB: 4)

isp:34.233.3.43
completed in 51ms (Count: 21, DB 4)

我将每个日志作为一个单独的字符串。 我提取计数的最佳方法是什么,然后我可以使用它获得总计数,即我想提取 34 和 21,以便我可以将它们加在一起。

我想在 Python 2.7.5 中做到这一点,但我不确定从哪里开始。

任何帮助将不胜感激。

您可以使用re.findall()以字符串形式获取计数列表。 然后你只需要将字符串转换为整数并将它们相加:

import re

s = """isp:29.455.3.53
completed in 24ms (Count: 34, DB: 4)

isp:34.233.3.43
completed in 51ms (Count: 21, DB 4)
"""

sum = 0

for count in re.findall('Count: (\d+)', s):
    sum += int(count)

print(sum)

假设日志文件abc.txt包含以下abc.txt行:

isp:29.455.3.53
completed in 24ms (Count: 34, DB: 4)

isp:34.233.3.43
completed in 51ms (Count: 21, DB 4)

阅读和为每个开头行日志文件completed ,搜索的文本在括号内找到的数量。

with open('abc.txt') as fp:
for eachline in fp:
    if 'completed' in eachline:
        text = eachline[eachline.find("(")+1:eachline.find(")")]
        num = text.split(',')[0].split()[1]
        print num

如果您只查看以“已完成”开头的行并且格式一致(正如我在上面的评论中所问的那样),那么这会将您想要的值提取为整数

In [20]: s="completed in 51ms (Count: 21, DB 4)"

In [21]: int(s.split('Count:')[1].split(',')[0])
Out[21]: 21

您也可以使用正则表达式作为替代方案,但我更喜欢“简单比复杂好”。

x = 0

with open('\path\file.txt') as log:
    for line in log:
        if line.split(' ')[0] = completed:
            x += int(line.split(' ')[4][:-1])

print x

这会将计数转储到变量 x 中。 您需要先打开文件并使用 for 循环对其进行迭代。 第一个 if 检查该行是否以完成开始。 如果是,则第二行获取数字,减去逗号,转换为 int,然后添加到 x。

请注意,这仅在日志文件格式与示例中完全一致时才有效。 否则你可能想弄乱正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM