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 回答