[英]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.