如果我有一个字符串,如
“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']
答案 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()
除非你经常在一个紧凑的循环中这样做,否则你不必担心性能。清晰度是最重要的。而且我会说这个正则表达式很难被击败。