2017-06-01 128 views
1

我正在使用python脚本从Excel文件的列中读取数据并使用该数据在Cisco交换机上执行命令。从Excel中读取列中的数据

例如,下面我有2列

Switch  MAC 
aaa.com  mac.aaa.000 
bbb.com  mac.bbb.000 
ccc.com  mac.ccc.000 
.....  ..... 

蟒蛇现在去切换AAA和将设置港口安全与Mac mac.aaa.000为粘性。

这是命令:

switchport port-security **<mac-address>** sticky 

现在我已经登录部分完成,我执行命令。我需要从文件中读取2列的部分提供帮助,并知道要登录才能在相应的列上切换a和粘性的macaaa。

这是怎么了登录和交换机上执行命令:

term_len = "term len 0" 
# Need a loop here that gets switchname from coulmn A and assign it to variable host and also corresponding MAC address and assigns it to variable MAC 
host = "" 
MAC = "" 
session = telnetlib.Telnet(host) 
session.write(cred.username + '\n') 
session.read_until('Password: ') 
session.write(cred.password + '\n') 
session.read_until('>') 
session.write(cred.en + '\n') 
session.read_until('Password: ') 
session.write(cred.en_pass + '\n') 
session.read_until('#') 
session.write(term_len + '\n') 
session.write(switchport port-security **MAC** sticky + '\n') 

请帮助。循环将从文件读取所有交换机和MAC并执行sticky命令。

回答

1

我一直在使用openpyxl将excel数据读入脚本。

from openpyxl import * 
    from tkinter.filedialog import askopenfilename,askdirectory,asksaveasfilename 
    #file selector using tkinter 
    file = askopenfilename() 
    #load the workbook 
    wb=load_workbook(file) 
    #get sheets 
    sheets = wb.sheetnames 
    #select sheet to use by index from sheetnames 
    ws=wb[sheets[0]] 
    #loop through the rows of worksheet and store in list 
    switchMAC=[] 
    for r in range (ws.max_row): 
     row=[] 
     for c in range(ws.max_column): 
      row.append(ws.cell(row=r+1,column=c+1).value) 
     switchMAC.append(row) 

从这里,你现在有列表(switchMAC)的列表,你可以遍历来传递你的命令

for r in switchMac: 
     host=r[0] 
     MAC=r[1] 
     #add the rest of your code for each host within the loop 
+0

我下载了openpyxl文件夹,但似乎无法找到tkinter。我做了Tkinter,它认出了它,但“skopenfilename”等有红线。我的同事告诉我,不建议从Excel中读取数据,因此您可以为简单的txt文件添加解决方案。它将会有交换空间和连接空间,然后是MAC地址,然后是下一行等等。 – Damon

+0

您最好在这一点上将您的文本格式化为csv(Host,Mac)编辑器,并使用标准csv库和上述的循环过程。 https://docs.python.org/2/library/csv.html –

+0

@Damon tkinter不是openpyxl库的一部分,它是一个不同的python包。 – StarLord

1

您可以使用xlrd,该脚本可以让你变身Excel数据表词典列表:

import xlrd 

workbook = xlrd.open_workbook('foo.xls') 
workbook = xlrd.open_workbook('foo.xls', on_demand = True) 
worksheet = workbook.sheet_by_index(0) 
first_row = [] # The row where we stock the name of the column 
for col in range(worksheet.ncols): 
    first_row.append(worksheet.cell_value(0,col)) 
# transform the workbook to a list of dictionaries 
data =[] 
for row in range(1, worksheet.nrows): 
    elm = {} 
    for col in range(worksheet.ncols): 
     elm[first_row[col]]=worksheet.cell_value(row,col) 
    data.append(elm) 
print data 

您还可以使用Pandas

from pandas import * 
xls = ExcelFile('foo.xls') 
df = xls.parse(xls.sheet_names[0]) 
print df.to_dict() 
1

您可以使用此代码从excel文件中读取数据。

import os 
import datetime 
import sys 
import re 
import openpyxl 
import uuid 
from openpyxl import load_workbook 

class ExcelDictSmall(dict): 
    ''' 
    Dictionary with all Sheet Names as key, value is a List of Rows each item in a Row List is a List of Cells 
    ''' 
    def __init__(self,dir,fname): 
     fullFname = os.path.join(dir,fname) 
     wb = load_workbook(filename=fullFname, read_only=True) 
     allSheets= wb.get_sheet_names() 
     for sheet in allSheets: 
      sheetList = [] 
      rowlist=[] 
      for row in wb[sheet].rows: 
       for cell in row: 
        rowlist.append(cell.value) 
       sheetList.append(rowlist) 
       rowlist=[] 
      self[sheet]=sheetList