Я пытаюсь облегчить чтение файла журнала.
Мне удалось преобразовать каждую строку файла журнала так, чтобы у меня был Python-текст с фактами о каждой строке, то есть у меня есть файлв памяти как массив, который выглядит примерно так:
[
{'keyword':'a', 'is_pair':True, 'type':'open', 'details':'iwiv', 'linenumber':5},
{'keyword':'a', 'is_pair':True, 'type':'open', 'details':'83fi', 'linenumber':200},
{'keyword':'a', 'is_pair':True, 'type':'open', 'details':'28c8', 'linenumber':360},
{'keyword':'a', 'is_pair':True, 'type':'close', 'details':'28c8', 'linenumber':365},
{'keyword':'a', 'is_pair':True, 'type':'open', 'details':'28c8', 'linenumber':370},
{'keyword':'a', 'is_pair':True, 'type':'close', 'details':'28c8', 'linenumber':375},
{'keyword':'a', 'is_pair':True, 'type':'open', 'details':'aowq', 'linenumber':400},
{'keyword':'b', 'is_pair':True, 'type':'open', 'details':'pwiv', 'linenumber':520},
{'keyword':'b', 'is_pair':True, 'type':'close', 'details':'pwiv', 'linenumber':528},
{'keyword':'d', 'is_pair':False, 'details':'9393', 'linenumber':600},
{'keyword':'b', 'is_pair':True, 'type':'open', 'details':'viao', 'linenumber':740},
{'keyword':'b', 'is_pair':True, 'type':'close', 'details':'viao', 'linenumber':741},
{'keyword':'b', 'is_pair':True, 'type':'open', 'details':'viao', 'linenumber':750},
{'keyword':'b', 'is_pair':True, 'type':'close', 'details':'viao', 'linenumber':777},
{'keyword':'a', 'is_pair':True, 'type':'close', 'details':'aowq', 'linenumber':822},
{'keyword':'a', 'is_pair':True, 'type':'close', 'details':'83fi', 'linenumber':850},
{'keyword':'a', 'is_pair':True, 'details':'iwiv', 'linenumber':990},
{'keyword':'c', 'is_pair':False, 'details':'1212', 'linenumber':997},
]
Я пытаюсь сделать "пару""ближайших соседей", чье "ключевое слово" соответствует **,например, сопоставление вложенных скобок и вывод результатов в виде некоего стандартизированного синтаксиса текста для вложения, такого как XML или JSON.
Я уже знаю, какие ключевые слова «созданы отдельно» против «должны» иметьсовпадение, «помеченное в моих входных данных как« is_pair ».
Я хотел бы дать какой-то« диапазон линий »для пары, которую я объединяю ... для тех, которые являются однострочными, яне волнует, если это пара «начало» и «конец» с одинаковым номером, нулевым концом, совершенно другой меткой (как в моих примерах) и т. д.
Вот несколько примеров того, как может выглядеть :
Пример 1
<a start="5" end="990">
iwiv
<a start="200" end="850">
83fi
<a start="360" end="365">
28c8
</a>
<a start="370" end="375">
28c8
</a>
<a start="400" end="822">
aowq
<b start="520" end="528">
pwiv
</b>
<d linenumber="600">
9393
</d>
<b start="740" end="741">
viao
</b>
<b start="750" end="777">
viao
</b>
</a>
</a>
</a>
<c linenumber="997">
1212
</c>
Пример 2
<a start="5" end="990" details="iwiv">
<a start="200" end="850" details="83fi">
<a start="360" end="365" details="28c8"/>
<a start="370" end="375" details="28c8"/>
<a start="400" end="822" details="aowq">
<b start="520" end="528" details="pwiv"/>
<d linenumber="600" details="9393"/>
<b start="740" end="741" details="viao"/>
<b start="750" end="777" details="viao"/>
</a>
</a>
</a>
<c linenumber="997" details="1212"/>
Пример 3
[
{
'keyword':'a',
'start':5,
'end':990,
'details':'iwiv',
'inner':[
{
'keyword':'a',
'start':200,
'end':850,
'details':'83fi',
'inner':[
{'keyword':'a', 'details':'28c8'},
{'keyword':'a', 'details':'28c8'},
{
'keyword':'a',
'start':400,
'end':822,
'details':'aowq',
'inner':[
{'keyword':'b', 'start':520, 'end':528, 'details':'pwiv'},
{'keyword':'d', 'linenumber':600, 'details':'9393'},
{'keyword':'b', 'start':740, 'end':741, 'details':'viao'},
{'keyword':'b', 'start':750, 'end':777, 'details':'viao'}
]
}
]
}
]
},
{'keyword':'c', 'linenumber':997, 'details':'1212'}
]
Не обязательноМне нужна помощь с деталями написания файлов JSON или XML.
В алгоритме, в частности Pythonically, я не уверен, что это аспект «сопоставления комков» этой работы.
Как мне приблизиться к преобразованию чего-либо из «линейного списка» в «гнездо», где каждый элемент с open
соответствует следующему ближайшему close
того же ключевого слова, которое еще не «заявлено»"лучшим кандидатом?