Форум сайта python.su
IskatelХороший наброс! ) Это, конечно, обсуждаемо, но в текущей редакции делает не совсем то.
Конечные автоматы гораздо быстрее и надежнее
s = """ -2015-08-19 16:35:51:682031 musor1: 1386500 kB musor2: 176212 kB musor3: 3900 kB -2015-08-19 16:35:55:554202 MemTotal: 1386500 kB MemFree: 176232 kB Buffers: 3908 kB """ out =[] pos = -1 for line in s.split('\n'): if not line: continue if line[0] == '-': pos = 0 elif pos == 0: mt = int(line.split(':')[1].strip().split(' ')[0]) pos = 1 elif pos == 1: mf = int(line.split(':')[1].strip().split(' ')[0]) pos = 2 elif pos == 2: buf = int(line.split(':')[1].strip().split(' ')[0]) pos = -1 out.append({'MemTotal':mt,'MemFree':mf,'Buffers':buf}) print(out)
>>> [{'MemTotal': 1386500, 'MemFree': 176212, 'Buffers': 3900}, {'MemTotal': 1386500, 'MemFree': 176232, 'Buffers': 3908}] >>>
Офлайн
Про мусор я гдетото пропустил, в файле примера его нет… Или форумчане на всякий случай еще и искуственный интелект запилить хотят?
ЗЫ. как вы в коде делаете пустые строки? у меня тег “код” их выкидывает
Отредактировано Iskatel (Авг. 23, 2015 17:16:32)
Офлайн
IskatelПро пустые строки тоже.
Про мусор я гдетото пропустил, в файле примера его нет
IskatelО, это тайное знание. Нужно руками пробелы в начале пустых строк добавить.
как вы в коде делаете пустые строки? у меня тег “код” их выкидывает
Офлайн
ShamanНу в моем варианте пустых строк то и нет, это вы строку посплитили, а при чтении из файла там честное ‘\n’ стоит
Про пустые строки тоже.
elif pos == 0 and line.startswith('MemTotal') #ну и так далее
Отредактировано Iskatel (Авг. 23, 2015 17:49:29)
Офлайн
IskatelО происхождении данных сказано мало. Судя по тому как в них внезапно смешались стили окончаний, они правятся вручную и могут иметь всякие неожиданности.
Раз это вывод другой проги, то “внезапно” он появиться не может.
Офлайн
ShamanЭто, пардон, откуда?
split('-')
Офлайн
Iskatel
Это, пардон, откуда?
>>> """ -2015-08-19 16:35:51:682031 MemTotal: 1386500 kB MemFree: 176212 kB Buffers: 3900 kB -2015-08-19 16:35:55:554202 MemTotal: 1386500 kB MemFree: 176232 kB Buffers: 3908 kB """.split('\n-') ['', '2015-08-19 16:35:51:682031\nMemTotal: 1386500 kB\nMemFree: 176212 kB \nBuffers: 3900 kB\n', '2015-08-19 16:35:55:554202\nMemTotal: 1386500 kB\nMemFree: 176232 kB\nBuffers: 3908 kB\n'] >>>
Офлайн
И внезапности в примере нет: дата и пустая строка всегда \n, данные всегда \r\n.
Вполне вероятно что данные выводит сторонний модуль, а программер, его использующий, добавил вывод даты и пустой строки, по привычке поставив \n
Офлайн
ShamanТогда я совсем ничего не понимаю - у меня таких идей не возникало, что там развивать??
развейте идею на счет split('-')
Офлайн
IskatelА это
у меня таких идей не возникало
int(line.split(':')[1].strip().split(' ')[0])
Офлайн