Если у вас есть данные, как представлено:
data = """PORT NAME STATUS VLAN DUPLEX SPEED
Gi1/0/11 notconnect 33 auto auto
Gi1/0/12 notconnect 6 auto auto
Gi1/0/13 notconnect 60 auto auto
Gi1/0/13 notconnect 60 auto auto
"""
Тогда сначала вы можете собрать столбцы размеров:
headers = {}
header_line = data.split('\n')[0]
name = ''
position = 0
for char in header_line:
if char != ' ' and len(name) != len(name.rstrip()):
headers[name.rstrip()] = position
name = ''
position = 0
name += char
position += 1
headers[name.rstrip()] = None
print(headers)
Тогда у вас будут столбцы с их размерами в символах (где длина последнего столбца - это все, что осталось)
{'PORT': 14, 'NAME': 15, 'STATUS': 13, 'VLAN': 13, 'DUPLEX': 7, 'SPEED': None}
Когда у вас будет такая карта, вы можете извлечь и распечатать только разрешенный заголовок
allowed_headers = ['PORT', 'STATUS', 'VLAN']
for line in data.strip().split('\n'):
for header, length in headers.items():
if length:
value = line[:length]
line = line[length:]
else:
value = line
if header in allowed_headers:
print(value, end="")
print()
->
PORT STATUS VLAN
Gi1/0/11 notconnect 33
Gi1/0/12 notconnect 6
Gi1/0/13 notconnect 60
Gi1/0/13 notconnect 60
Конечно, вы можете собирать это как dict вместо печати, а затем вы можете делать то, что вы хотите с этими данными:
elements = []
for line in data.strip().split('\n')[1:]:
element = {}
for header, length in headers.items():
if length:
value = line[:length]
line = line[length:]
else:
value = line
element[header] = value.rstrip()
elements.append(element)
print(elements)
[{'PORT': 'Gi1/0/11', 'NAME': '', 'STATUS': 'notconnect', 'VLAN': '33', 'DUPLEX': 'auto', 'SPEED': 'auto'}, {'PORT': 'Gi1/0/12', 'NAME': '', 'STATUS': 'notconnect', 'VLAN': '6', 'DUPLEX': 'auto', 'SPEED': 'auto'}, {'PORT': 'Gi1/0/13', 'NAME': '', 'STATUS': 'notconnect', 'VLAN': '60', 'DUPLEX': 'auto', 'SPEED': 'auto'}, {'PORT': 'Gi1/0/13', 'NAME': '', 'STATUS': 'notconnect', 'VLAN': '60', 'DUPLEX': 'auto', 'SPEED': 'auto'}]
Примечание:
Если у вас есть табуляторы в выводе, вам может потребоваться скрипт расширения:
if char != ' ':
необходимо изменить на:
if char not in ' \t':