最近在使用Nornir框架对网络设备进行备份时,遇到了一个相对比较棘手的问题,因为Nornir需要hosts.yaml,一个一个写的话几百台设备信息不知道要写到什么时候去,因此写了一个python脚本实现自动从excel文件读取设备IP地址,端口等信息,自动写入yaml文件。
excel文件
![]()
脚本内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
   | import xlrd, json, yaml
  def main(file_name):     table_name = xlrd.open_workbook(file_name)     sheet_name = table_name.sheet_by_index(0)
      for k in range(1,sheet_name.nrows):         data = sheet_name.row_values(k)
          dict_json = {             data[0]: {"hostname": data[1], "port": int(data[2])}             }         excel_to_json = json.dumps(dict_json)         json_to_yaml = yaml.load(excel_to_json, Loader=yaml.FullLoader)         print(json_to_yaml)
          with open('host.yaml',encoding='utf-8',mode='a',) as f:             yaml.safe_dump(json_to_yaml,f,allow_unicode=True)
  if __name__ == '__main__':     main(file_name= input("文件路径:"))
 
   | 
 
脚本执行结果
![]()
注意事项
- 目前只测试了xlsx和xls格式表格
 
- xlrd版本为1.2,最新版本不支持xlsx
 
脚本第二版