簡體   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