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

Python读取CSV文件并SSH连接路由器时的换行符处理问题求助

这个问题我太熟了!Windows风格的\r\n换行符确实会搞砸SSH连接——Netmiko会把带换行的字符串当作主机名/IP去尝试连接,肯定会失败。给你几个简单有效的解决办法:

方法1:用strip()快速去除首尾空白字符

这是最直接的修复方式,每次读取行之后,用strip()把换行符、空格这些干扰字符统统去掉:

nodenum=1
import csv
from netmiko import ConnectHandler

f=open('Routers.csv', 'r') #包含主机名的文件
c=f.readlines()
with open('Output.csv','w', newline='') as f: # 改用w模式+newline=''避免空行
    write = csv.writer(f)
    write.writerow(['Hostname', "Cellular"])
    for i in c :
        # 去除首尾的\r\n、空格、制表符等空白字符
        host = i.strip()
        print ("Node", nodenum, "...Checking IP Address...", host)
        try:
            Connection = netmiko.ConnectHandler(ip=host, device_type="cisco_ios" , username="y", password="x", verbose=False)
            # 这里可以添加获取设备信息、写入结果的逻辑
            Connection.disconnect() # 用完记得断开连接
        except Exception as e:
            print(f"Node {nodenum} 连接失败: {str(e)}")
        nodenum +=1

strip()会自动清理字符串首尾所有空白类字符,完美解决你的换行符问题。

方法2:用csv.reader规范读取CSV文件

直接用readlines()读CSV其实不太专业,尤其是如果你的CSV以后可能增加列的话。用csv.reader会自动处理每行格式,包括换行符:

nodenum=1
import csv
from netmiko import ConnectHandler

# 用csv.reader读取,自动处理行分隔和列分割
with open('Routers.csv', 'r') as in_f:
    csv_reader = csv.reader(in_f)
    # 如果你的CSV有表头,先跳过:next(csv_reader)
    
    with open('Output.csv','w', newline='') as out_f:
        write = csv.writer(out_f)
        write.writerow(['Hostname', "Cellular"])
        for row in csv_reader:
            # 假设每行第一个元素是主机名/IP,保险起见再加strip
            host = row[0].strip()
            print ("Node", nodenum, "...Checking IP Address...", host)
            try:
                Connection = ConnectHandler(ip=host, device_type="cisco_ios" , username="y", password="x", verbose=False)
                # 示例:获取Cellular信息并写入
                cellular_data = Connection.send_command("show cellular 0/0/0 status")
                write.writerow([host, cellular_data])
                Connection.disconnect()
            except Exception as e:
                write.writerow([host, f"连接失败: {str(e)}"])
                print(f"Node {nodenum} 连接失败: {e}")
            nodenum +=1

这种方式不仅解决了换行符问题,还能更好地适配CSV的格式变化,是处理CSV文件的标准姿势。

额外小提示

  • 一定要处理异常:连接失败时把错误信息写入输出文件,方便后续排查问题
  • SSH连接用完记得disconnect(),避免占用不必要的资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:32:39