??首先說下腳本背景,公司最近有個項目涉及全省的一個網(wǎng)絡(luò)改造,項目開始之前要將網(wǎng)絡(luò)設(shè)備的登陸方式全部添加到CRT中,兩個部門,200多個縣,平均一個縣5個設(shè)備,也就是2x200x5=2000個,也不是很多哈,要是一個人弄,沒個三五天功夫是下不來的。我們?nèi)齻€人弄了兩天吧,基本完成,我的腳本只做了最后一個地市的。
1.模板
??這個腳本運行要有一個模板,就是有規(guī)律的一個excel表格,如果現(xiàn)有表格不是很規(guī)律可以進(jìn)行簡單整理。

Snipaste_2018-12-13_20-33-38.png
以地市為sheet名,第一列是區(qū)縣名稱,第二列為設(shè)備名稱,第三列為管理地址。
2.程序
??下面附上程序,基本應(yīng)有的備注,程序里面都有,如果有朋友看到哪兒不明白的咱們可以討論。
#coding:utf-8
#總體思路
#1.通過xlrd模塊讀取表格
#2.以sheet名建立文件夾并且進(jìn)入次文件夾,
# 再以第一列的區(qū)縣名稱建立文件夾,進(jìn)入
# 次文件夾中,寫入配置文件,然后進(jìn)行下一個縣
import xlrd
import shutil
import os
import time
#為程序進(jìn)行過程中目錄的更改
def ChangeDir(path):
#嘗試去創(chuàng)建文件夾,如果文件夾已經(jīng)存在則進(jìn)入到該文件夾中
try:
os.mkdir(path)
os.chdir(path)
except Exception as e:
if '183' in str(e):
os.chdir(path)
#print 'test'
else:
raise e
def make():
#打開模板配置文件,讀取到列表中
ori_file = open('demo.ini')
ori_file_list = ori_file.readlines()
#模板表格
workbook = xlrd.open_workbook(r'data.xlsx')
#統(tǒng)計sheets數(shù)量
sheet_count = len(workbook.sheets())
for i in range(0,sheet_count):
#遍歷表中sheet,sheet為地市的名稱,以sheet名建立文件夾
sheet = workbook.sheet_by_index(i)
conty_name= sheet.cell(1,0).value
#將工作目錄切入到縣級
ChangeDir(sheet.name)
ChangeDir(conty_name)
#下面這個循環(huán)的思路就是,表格中縣級單位有2-5設(shè)備,
#所以判斷當(dāng)前單元格為空,下一個單元格不為空,
#此時表示當(dāng)前縣級單位所有設(shè)備的配置文件均已生成
for j in range(1,len(sheet.col_values(0))):
#print 'conty:'+conty_name
#print os.getcwd()
#獲取縣級單位名稱
conty_name = sheet.cell(j,0).value
#獲取設(shè)備名稱
eq_name = sheet.cell(j,1).value
#以設(shè)備名稱為文件名建立配置文件
new_file_name = eq_name+'.ini'
new_file = open(new_file_name,'w')
#修改配置文件中的Hostname后面的ip地址,此處的[34]為本配置文件中的行號,不通用
ori_file_list[34]='S:"Hostname"='+sheet.cell(j,2).value+'\n'
new_file.writelines(ori_file_list)
print '[+] ' + new_file_name
#此處的try是為判斷一個sheet結(jié)束,當(dāng)操作下一個單元格提示out of range時結(jié)束當(dāng)前sheet的操作
try:
if(conty_name=='' and sheet.cell(j+1,0).value!=''):
os.chdir('..')
ChangeDir(sheet.cell(j+1,0).value)
except Exception as e:
if 'list index out of range' in str(e):
break
else:
raise e
#將目錄切換至程序開始時的目錄
os.chdir('../..')
if __name__ == '__main__':
make()
程序運行的結(jié)果:

running.png

last.png
??其實這個腳本還可以擴(kuò)展,表格中添加兩列分別為賬號密碼,可以在項目進(jìn)行前期將所有的設(shè)備的配置進(jìn)行采集,這也是項目進(jìn)行前期必須要進(jìn)行的,目前項目中是人工采集,苦逼的很啊。
3.結(jié)尾
??堅持學(xué)習(xí),堅持積累,堅持寫文章。時代發(fā)展真的很快,大家需要不斷學(xué)習(xí)才能保持不落后。對于我這個剛畢業(yè)的人來說,更是如此,每天要有計劃,每天都要充實起來。