You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Netmiko获取交换机接口状态导入Pandas时的列错位问题

解决Netmiko获取交换机接口状态导入Pandas的列错位问题

问题根源

你当前代码的核心问题是浪费了Netmiko的TextFSM结构化解析能力:虽然调用send_command时加了use_textfsm=True,但后续又手动按换行和空格拆分原始文本——这种方式无法处理Name列含空格或为空的场景:空格会被误判为列分隔符,空值会导致后续列左移,最终数据完全错位。

修正后的代码

直接使用Netmiko返回的结构化数据(use_textfsm=True后返回的是列表嵌套字典,每个字典对应一行数据,键就是表头),不需要手动拆分文本:

from netmiko import ConnectHandler
import pandas as pd

def get_ip_address():
    ip_address_request = input("请输入设备IP地址: ")
    return ip_address_request

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

net_connect = ConnectHandler(**switch)
prompt = net_connect.find_prompt()
hostname = prompt[:-1]
# use_textfsm=True会直接返回结构化的列表字典
status_data = net_connect.send_command("show interface status", use_textfsm=True)
net_connect.disconnect()

# 直接转DataFrame
status_df = pd.DataFrame(status_data)
# 处理Name列的空值(如果有的话)
status_df['Name'] = status_df['Name'].fillna('')
# 按原始表头顺序调整列(确保和CLI输出一致)
column_order = ['Port', 'Name', 'Status', 'Vlan', 'Duplex', 'Speed', 'Type']
status_df = status_df[column_order]

pd.set_option('display.max_colwidth', None)
print(status_df.to_string(index=False))

效果验证

修正后的数据会和手动CLI输出完全一致:

PortNameStatusVlanDuplexSpeedType
Fa0/1PC DATAconnected1a-fulla-10010/100BaseTX
Fa0/2PC DATAnotconnect1autoauto10/100BaseTX
Fa0/3disabled1autoauto10/100BaseTX
Fa0/4connected1a-fulla-10010/100BaseTX
Fa0/5KRONOSnotconnect1autoauto10/100BaseTX
Fa0/6KRONOSnotconnect1autoauto10/100BaseTX

关键说明

  • TextFSM是Netmiko内置的结构化解析工具,针对Cisco等设备的CLI输出做了适配,能自动识别带空格的字段、空值,返回标准的键值对结构。
  • 手动拆分文本的方式只适用于无空格、无空值的简单表格,复杂场景必须依赖结构化解析工具。

内容的提问来源于stack exchange,提问作者karoks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:53:19