Данные в пандах перепрыгивают в другие ячейкиPython

Программы на Python
Anonymous
Данные в пандах перепрыгивают в другие ячейки

Сообщение Anonymous »

Я пытаюсь получить показать статус интерфейса от сетевых коммутаторов и поместить их в Pandas (у меня есть другие планы на будущее по использованию этих данных)
выход самого переключателя ниже того, чего я пытаюсь достичь.


Порт
Имя
СтатусVlan
Дуплекс
Скорость
Тип




Fa0/1
ДАННЫЕ ПК
подключено
1
a-полное
a -100
10/100BaseTX


Fa0/2ДАННЫЕ ПК
не подключаются
1
авто
авто
10/100BaseTX


Fa0/3< /td>

отключено
1
авто
авто
10/100BaseTX


Fa0/ 4

подключено
1
полный
a-100
10/100BaseTX


Fa0/5
KRONOS
не подключается
1
авто
авто
10/100BaseTX


Fa0/6
KRONOS
не подключается
1
авто
авто
10/100BaseTX



в настоящее время у меня есть две проблемы
  • если ячейка имени пусто в любой строке, все остальные ячейки сдвинуты влево. (например: Fa0/3 и Fa0/4)
  • если в ячейке имени есть два или более слов с пробелами, каждое слово заполняет ячейку справа, что делает данные непригодными для использования.( Например: Fa0/1 и Fa0/2)
вывод ниже на самом деле является результатом моего кода. как вы можете видеть, между двумя таблицами есть некоторые расхождения.


Порт
Имя
Статус
Vlan
Дуплекс
Скорость
Тип




Fa0/1
ПК
ДАННЫЕ
подключены
1
полный
a-100


Fa0/2
ПК
ДАННЫЕ
не подключаются
1
автоавто


Fa0/3
отключено
1
авто
авто
10/100BaseTX
nan


Fa0/4
подключен
1
полный
a-100
< td>10/100BaseTX
nan


Fa0/5
KRONOS
не подключается
1
авто
авто
10/100BaseTX


Fa0/6< /td>
KRONOS
не подключается
1
авто
авто
10/100BaseTX



в настоящее время у меня есть две проблемы.
  • если ячейка имени пуста в любой строке, все остальные ячейки смещаются в левый. (например: Fa0/3 и Fa0/4)
  • если в ячейке имени есть два или более слов с пробелами, каждое слово заполняет ячейку справа, что делает данные непригодными для использования.( Например: Fa0/1 и Fa0/2)
вот мой код
def get_ip_address():
ip_address_request = input("Please enter the IP address of the device: ")
return ip_address_request

ip_address = get_ip_address()
switch = {
"device_type":"cisco_ios",
"ip": ip_address,
'username': 'redacted',
'password': 'redacted',
}

# Establish SSH connection to the switch

net_connect = ConnectHandler(**switch)
prompt = net_connect.find_prompt()
hostname = prompt[:-1]

# send the show interfaces command and retrieve the output
version = net_connect.send_command("show version | inc uptime")
output = net_connect.send_command("Show interfaces", read_timeout=120, use_textfsm=True)
status = net_connect.send_command("Show interface status", use_textfsm=True)

# Close the ssh connection
net_connect.disconnect()

interfaces = []
lines = output.splitlines()
interface_regex = re.compile(r"(\S+\d+)\s+is")
last_input_regex = re.compile(r"Last input (\S+),")
for i in range(len(lines)):
line = lines
if interface_regex.search(line):
interface_match = interface_regex.search(line)
interface = interface_match.group(1)
for j in range(i, len(lines)):
if last_input_regex.search(lines[j]):
last_input_match = last_input_regex.search(lines[j])
last_input = last_input_match.group(1)
interfaces.append((interface, last_input))
break

sum_status = []
lines = status.strip().split('\n')
headers = lines[0].split()

values = lines[0].split()
entry = {}
for i, header in enumerate(headers):
if i < len(values):
entry[header] = values
sum_status.append(entry)

for line in lines[1:]:
values = line.split()
entry = {}
for i, header in enumerate(headers):
if i < len(values):
entry[header] = values
sum_status.append(entry)

interfaces_df = pd.DataFrame(interfaces, columns=['Interface', 'Last Input'])

status_df = pd.DataFrame(sum_status)

df = pd.concat([interfaces_df, status_df], axis=1)

filtered_df = df[~df['Interface'].str.contains('Vlan')]

filtered_df.reset_index(inplace=True, drop=True)

pd.set_option('display.max_colwidth', None)

filtered_df.loc[:, 'Name'] = filtered_df['Name'].fillna('')

column_widths = {'Interface': 20, 'Last Input': 12, 'Port': 8, 'Name': 20, 'Status': 12, 'Vlan': 8, 'Duplex': 10, 'Speed': 14, 'Type': 12}

pd.set_option('display.max_colwidth', None)

pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.colheader_justify', 'left')

formatted_df = filtered_df.copy()

for col in filtered_df.columns:
formatted_df[col] = formatted_df[col].apply(lambda x: str(x).ljust(column_widths[col]))

print(formatted_df.to_string(index=False))


Подробнее здесь: https://stackoverflow.com/questions/781 ... ther-cells

Вернуться в «Python»