在Python中从字符串中提取负载平均浮点值的最佳方法是什么?

时间:2009-01-22 23:01:19

标签: python string floating-point

如果我有一个字符串,如

“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']

6 个答案:

答案 0 :(得分:5)

这应该有效:

# s is the string to parse
loadavg = [float(x) for x in s.rsplit('load average: ', 1)[1].split(', ')]

答案 1 :(得分:5)

您在/proc/loadavg特殊文件中拥有相同的信息,因此您可以执行以下操作:

>>> open("/proc/loadavg").readline().split(" ")[:3]

答案 2 :(得分:4)

或者,如果你实际上在寻找负载平均值,那么在Python 2.3+中你有:

import os
os.getloadavg()

答案 3 :(得分:0)

你的方式似乎很好。如果你想避免使用正则表达式,你可以做类似

的事情
>>> print s.split(': ')[1].split(', ')
['0.22', '0.15', '0.10']

答案 4 :(得分:0)

我肯定会使用正则表达式。您可以通过先调用s.find('load average')并从该位置开始正则表达式匹配而不是在字符串的开头(这是默认值)来提高效率。

答案 5 :(得分:0)

正则表达式就是这样。但也许更强大:

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

除非你经常在一个紧凑的循环中这样做,否则你不必担心性能。清晰度是最重要的。而且我会说这个正则表达式很难被​​击败。