Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 23, 2015 17:10:27

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

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}]
>>> 

Офлайн

#2 Авг. 23, 2015 17:14:28

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

Про мусор я гдетото пропустил, в файле примера его нет… Или форумчане на всякий случай еще и искуственный интелект запилить хотят?

ЗЫ. как вы в коде делаете пустые строки? у меня тег “код” их выкидывает

Отредактировано Iskatel (Авг. 23, 2015 17:16:32)

Офлайн

#3 Авг. 23, 2015 17:27:45

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

Iskatel
Про мусор я гдетото пропустил, в файле примера его нет
Про пустые строки тоже.
Iskatel
как вы в коде делаете пустые строки? у меня тег “код” их выкидывает
О, это тайное знание. Нужно руками пробелы в начале пустых строк добавить.

Офлайн

#4 Авг. 23, 2015 17:48:07

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

Shaman
Про пустые строки тоже.
Ну в моем варианте пустых строк то и нет, это вы строку посплитили, а при чтении из файла там честное ‘\n’ стоит

А насчет мусора - зачем решать задачу которой нет? Раз это вывод другой проги, то “внезапно” он появиться не может. Я так и не нашел упоминания о нем топикстартера, нашел только Ваше “лучше учесть все случаи” А тут уже непонятно, вроде ТС все случаи свои и описал, откуда другим то взяться? Впрочем ТС виднее…

Насчет вашего примера можно так:

elif pos == 0 and line.startswith('MemTotal')
#ну и так далее

Вот только это разговор ниочем - таких “всех случаев” можно напридумывать столько, что и впрямь только ИИ справится В исходных данных то этого нет…

ЗЫ. за тайное знание спасибо

Отредактировано Iskatel (Авг. 23, 2015 17:49:29)

Офлайн

#5 Авг. 23, 2015 17:57:13

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

Iskatel
Раз это вывод другой проги, то “внезапно” он появиться не может.
О происхождении данных сказано мало. Судя по тому как в них внезапно смешались стили окончаний, они правятся вручную и могут иметь всякие неожиданности.
Если придерживаться теории о статичности формата, развейте идею на счет split('-').

Офлайн

#6 Авг. 23, 2015 18:03:43

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

Shaman
split('-')
Это, пардон, откуда?

Офлайн

#7 Авг. 23, 2015 18:08:34

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

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

Офлайн

#8 Авг. 23, 2015 18:11:18

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

И внезапности в примере нет: дата и пустая строка всегда \n, данные всегда \r\n.
Вполне вероятно что данные выводит сторонний модуль, а программер, его использующий, добавил вывод даты и пустой строки, по привычке поставив \n

Офлайн

#9 Авг. 23, 2015 18:17:05

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

Shaman
развейте идею на счет split('-')
Тогда я совсем ничего не понимаю - у меня таких идей не возникало, что там развивать??

Офлайн

#10 Авг. 23, 2015 18:19:55

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Генерация списка словарей из текстового файла

Iskatel
у меня таких идей не возникало
А это
int(line.split(':')[1].strip().split(' ')[0])
?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version