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