Для меня это хорошо структурировано. Он имеет различные отступы для распознавания подэлементов и *
для распознавания начала нового словаря и пустую строку для распознавания нового маршрута. он также имеет :
для разделения строки и получения ключа и значения.
data = ''' Type : Router
Ls id : 1.1.1.2
Adv rtr : 1.1.1.2
Ls age : 201
Len : 84
Link count: 5
* Link ID: 1.1.1.2
Data : 255.255.255.255
Link Type: StubNet
Metric : 1
Priority : Medium
* Link ID: 1.1.1.4
Data : 192.168.100.34
Link Type: P-2-P
Metric : 1
* Link ID: 192.168.100.33
Data : 255.255.255.255
Link Type: StubNet
Metric : 1
Priority : Medium
* Link ID: 1.1.1.1
Data : 192.168.100.53
Link Type: P-2-P
Metric : 1
* Link ID: 192.168.100.54
Data : 255.255.255.255
Link Type: StubNet
Metric : 1
Priority : Medium
Type : Router
Ls id : 1.1.1.1
Adv rtr : 1.1.1.1
Ls age : 1699
Len : 96
Options : ASBR E
seq# : 80008d72
chksum : 0x16fc
Link count: 6
* Link ID: 1.1.1.1
Data : 255.255.255.255
Link Type: StubNet
Metric : 1
Priority : Medium
* Link ID: 1.1.1.1
Data : 255.255.255.255
Link Type: StubNet
Metric : 12
Priority : Medium
* Link ID: 1.1.1.3
Data : 192.168.100.26
Link Type: P-2-P
Metric : 10
* Link ID: 192.168.100.25
Data : 255.255.255.255
Link Type: StubNet
Metric : 10
Priority : Medium
* Link ID: 1.1.1.2
Data : 192.168.100.54
Link Type: P-2-P
Metric : 10
* Link ID: 192.168.100.53
Data : 255.255.255.255
Link Type: StubNet
Metric : 10
Priority : Medium'''
results = []
group = {}
group['items'] = []
subgroup = None
for line in data.split('\n'):
if not line.strip():
results.append(group)
group = {}
group['items'] = []
subgroup = None
elif not line.startswith(' '):
key, val = line.split(':')
key = key.strip()
val = val.strip()
group[key] = val
else:
if '*' in line:
if subgroup:
group['items'].append(subgroup)
subgroup = {}
key, val = line.split(':')
key = key.replace('*', '').strip()
val = val.strip()
subgroup[key] = val
group['items'].append(subgroup)
results.append(group)
print(results)
И отображать это красиво
import json
print(json.dumps(results, indent=2))
Результат:
[
{
"items": [
{
"Link ID": "1.1.1.2",
"Data": "255.255.255.255",
"Link Type": "StubNet",
"Metric": "1",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.4",
"Data": "192.168.100.34",
"Link Type": "P-2-P",
"Metric": "1"
},
{
"Link ID": "192.168.100.33",
"Data": "255.255.255.255",
"Link Type": "StubNet",
"Metric": "1",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.1",
"Data": "192.168.100.53",
"Link Type": "P-2-P",
"Metric": "1"
}
],
"Type": "Router",
"Ls id": "1.1.1.2",
"Adv rtr": "1.1.1.2",
"Ls age": "201",
"Len": "84",
"Link count": "5"
},
{
"items": [
{
"Link ID": "1.1.1.1",
"Data": "255.255.255.255",
"Link Type": "StubNet",
"Metric": "1",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.1",
"Data": "255.255.255.255",
"Link Type": "StubNet",
"Metric": "12",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.3",
"Data": "192.168.100.26",
"Link Type": "P-2-P",
"Metric": "10"
},
{
"Link ID": "192.168.100.25",
"Data": "255.255.255.255",
"Link Type": "StubNet",
"Metric": "10",
"Priority": "Medium"
},
{
"Link ID": "1.1.1.2",
"Data": "192.168.100.54",
"Link Type": "P-2-P",
"Metric": "10"
},
{
"Link ID": "192.168.100.53",
"Data": "255.255.255.255",
"Link Type": "StubNet",
"Metric": "10",
"Priority": "Medium"
}
],
"Type": "Router",
"Ls id": "1.1.1.1",
"Adv rtr": "1.1.1.1",
"Ls age": "1699",
"Len": "96",
"Options": "ASBR E",
"seq#": "80008d72",
"chksum": "0x16fc",
"Link count": "6"
}
]
Итак, теперь у вас есть структура Python, и вы можете получить то, что хотите.