Как лучше всего извлечь средние значения нагрузки с плавающей запятой из строки в Python?

Если у меня есть такая строка, как

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

Не стоит беспокоиться об оптимизации регулярных выражений. Вызов os.system ('uptime'), который вы, кажется, используете, занимает примерно в 1000 раз больше времени, чем вызов re.findall. hans.gerwitz.com/2004/08/12/…

max 23.01.2009 09:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
2 295
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Это должно работать:

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

У вас есть такая же информация в специальном файле /proc/loadavg, поэтому вы можете:

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

Неужели выходное время безотказной работы тоже отличалось?

Jaime Soriano 06.02.2009 14:03

Кажется, твой путь в порядке. Если вы хотите избежать регулярных выражений, вы можете сделать что-то вроде

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

Я бы определенно использовал регулярное выражение. Возможно, вы могли бы немного повысить эффективность, сначала вызвав s.find('load average') и начав сопоставление регулярного выражения с этой позиции, а не с начала строки (что по умолчанию).

На самом деле, мне больше нравится способ Адама.

David Z 23.01.2009 02:12

Регулярное выражение - это способ. Но, может быть, более надежно:

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

Если вы не делаете это очень часто в замкнутом цикле, вам не нужно беспокоиться о производительности. Ясность - вот что самое главное. И я бы сказал, что это регулярное выражение трудно превзойти.

Думайте об этом как о строке формата. Ясно как можно ясно, не так ли?

PEZ 23.01.2009 12:15

Или, если вы действительно ищете средние значения нагрузки, то в Python 2.3+ у вас есть:

import os
os.getloadavg()

Другие вопросы по теме