1

次のような文字列がある場合

「17:31:51 アップ 134 日、11:26、1 ユーザー、負荷平均: 0.22、0.15、0.10」

最後に x3 負荷平均値だけを抽出する最良の方法は何ですか? これを行う正規表現を書きましたが、これが最も効率的/最速の方法ですか?

>>> s = "17:31:51 up 134 days, 11:26,  1 user,  load average: 0.22, 0.15, 0.10"
>>> print re.findall(r"([0-9]\.\d+)", s)
['0.22', '0.15', '0.10']
4

6 に答える 6

5

これはうまくいくはずです:

# s is the string to parse
loadavg = [float(x) for x in s.rsplit('load average: ', 1)[1].split(', ')]
于 2009-01-22T23:08:04.543 に答える
5

特別なファイルに同じ情報がある/proc/loadavgため、次のことができます。

>>> open("/proc/loadavg").readline().split(" ")[:3]
于 2009-01-22T23:08:32.387 に答える
4

または、実際に負荷平均を探している場合、Python 2.3+ では次のようになります。

import os
os.getloadavg()
于 2012-09-18T05:22:11.173 に答える
0

あなたのやり方は問題ないようです。正規表現を避けたい場合は、次のようにすることができます

>>> print s.split(': ')[1].split(', ')
['0.22', '0.15', '0.10']
于 2009-01-22T23:08:51.967 に答える
0

私は間違いなく正規表現を使用します。s.find('load average')文字列の先頭 (デフォルト) ではなく、その位置から最初に正規表現の一致を呼び出して開始することで、おそらく効率を少し高めることができます。

于 2009-01-22T23:09:07.287 に答える
0

正規表現がその方法です。しかし、おそらくもっと堅牢です:

re.search(r"load average: (\d+.\d\d), (\d+.\d\d), (\d+.\d\d)$", s).groups()

タイトなループなどでこれを頻繁に行う場合を除き、パフォーマンスについて心配する必要はありません。わかりやすさが最も重要です。そして、この正規表現は打ち負かすのが難しいと思います。

于 2009-01-22T23:11:09.670 に答える