Как получить и проверить xml содержимое файла .log в Python? - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно проанализировать некоторые файлы журналов, содержимое которых похоже на XML, но оно не имеет root и не начинается с версии? xml.

Формат файла журнала:

2019-09-12 15:30:02.137 (162,<ThreadPool>    ) Info          Sending:
<Keepalive />
2019-09-12 15:30:03.512 (65 ,Estate            ) DebugInfo     Incoming buffer has 292 bytes
<Outcome>
  <ItemId>373011</ItemId>
  <AreaId>232</AreaId>
  <CarrierId>131</CarrierId>
  <AResult>
    <Measured>Ok</Measured>
  </AResult>
    <TimeStamp>2019-09-12T19:30:02Z</TimeStamp>
</Outcome>

Поскольку это файл .log Могу ли я использовать для этого библиотеку ElementTree? Мне нужно проверить Измерено OK для другого идентификатора элемента.

Я пробовал эти два, ни один из них не работал: (1)

import xml.etree.ElementTree as ET
tree = ET.parse(r'C:\lovely\Libraries\site.log')
root = tree.getroot()

(2)

import xml.etree.ElementTree as ET
import re
with open('C:\lovely\Libraries\site.log') as f:
xml = f.read()
tree = ET.fromstring(re.sub(r"(<\?xml[^>]+\?>)", r"\1<root>", xml) + "</root>")

Ответы [ 2 ]

0 голосов
/ 11 мая 2020

Попробуйте это. Он имеет высокую отказоустойчивость и обрабатывает данные как текст.

from simplified_scrapy import SimplifiedDoc
html = '''
2019-09-12 15:30:02.137 (162,<ThreadPool>    ) Info          Sending:
<Keepalive />
2019-09-12 15:30:03.512 (65 ,Estate            ) DebugInfo     Incoming buffer has 292 bytes
<Outcome>
  <ItemId>373011</ItemId>
  <AreaId>232</AreaId>
  <CarrierId>131</CarrierId>
  <AResult>
    <Measured>Ok</Measured>
  </AResult>
    <TimeStamp>2019-09-12T19:30:02Z</TimeStamp>
</Outcome>
'''
doc = SimplifiedDoc(html)
Outcome = doc.Outcome
print(Outcome.ItemId.text, Outcome.AreaId.text)

Результат:

373011 232
0 голосов
/ 30 апреля 2020

Вероятно, невозможно проанализировать файл, содержащий случайные фрагменты текста и XML, смешанные вместе. Части текста, скорее всего, содержат вещи, которые XML -подобны, но плохо сформированы (например, <\?xml[^>]+\?>); отличить это от XML невозможно в общем случае.

...