Анализатор Python для извлечения пары значений ключей из выходных данных

#python #parsing #text

#python #синтаксический анализ #текст

Вопрос:

Я только начал с python и столкнулся с извлечением данных из текстового вывода. Вывод текста осуществляется в виде текстовых блоков и имеет пары значений ключей

статус активное
имя server01
чтение: 4096 байт
пользователя abcd-12345-def
drive hgbcv-76s7e-hwte7ehxd-22byt82h
запись: 4096 байт
чтение: запросы 1
типа
запись на диск: запросы 1
размера 1099511627776
статус активное
имя server02
чтение: 4096 байт
пользователя abcd-12345-def
диск ngcdha6-76eg-78q7dg73-76eydh
запись: 4096 байт
чтение: запросы 1
типа
запись на диск: запросы 1
размера 1099511627776

Мне нужно проанализировать каждый блок и отобразить вывод как просто

статус, имя, диск, тип, диск

итак, для приведенного выше примера я должен иметь возможность получить вывод в виде

активный, server01, hgbcv-76s7e-hwte7ehxd-22byt82h, диск, 1099511627776
активный, server02, ngcdha6-76eg-78q7dg73-76eydh, диск, 1099511627776

Любая помощь или указатель для достижения этой цели будут высоко оценены.

Спасибо

Комментарии:

1. Итак, было ли это полезно для вас? Что произошло?

Ответ №1:

Это примерно то, что вы хотите:

 def create_dict(lines):
    return dict(line.split(" ") for line in lines)

lines1 = [
    "status active",
    "name server01",
    "read:bytes 4096",
    "user abcd-12345-def",
    "drive hgbcv-76s7e-hwte7ehxd-22byt82h",
    "write:bytes 4096",
    "read:requests 1",
    "type disk",
    "write:requests 1",
    "size 1099511627776",
]
lines2 = [
    "status active",
    "name server02",
    "read:bytes 4096",
    "user abcd-12345-def",
    "drive ngcdha6-76eg-78q7dg73-76eydh",
    "write:bytes 4096",
    "read:requests 1",
    "type disk",
    "write:requests 1",
    "size 1099511627776",
]

d1 = create_dict(lines1)
d2 = create_dict(lines2)

keys = ("status","name","drive","type","size")
for d in (d1, d2):
    print ",".join(d[key] for key in keys)
  

Это результат, который я получаю:

 >>> for d in (d1, d2):
...     print ",".join(d[key] for key in keys)
... 
active,server01,hgbcv-76s7e-hwte7ehxd-22byt82h,disk,1099511627776
active,server02,ngcdha6-76eg-78q7dg73-76eydh,disk,1099511627776
  

Вам нужно найти способ объединить связанные строки для вызова, create_dict а затем вы можете отфильтровать нужные ключи.

Обратите внимание, что ваш ключ «диск» должен быть «размером».