網(wǎng)絡(luò)工程師的Python實例入門到放棄

學(xué)網(wǎng)絡(luò)的很多同學(xué)對編程不感興趣。其實編程并非遙不可及。網(wǎng)絡(luò)工程師都知道的路由器和交換機的配置命令,那就是簡單的編程。

現(xiàn)代網(wǎng)絡(luò)的設(shè)備規(guī)模爆發(fā)式增長,對一個項目所有設(shè)備進(jìn)行命令配置,往往需要耗費大量的時間和人力成本。那么有沒有簡單易用的自動化方法,能夠?qū)崿F(xiàn)一鍵配置呢?

我的答案是:對網(wǎng)絡(luò)工程師來說,Python就是簡單易用,能幫助我們實現(xiàn)想要的自動化,從而極大的提升勞動生產(chǎn)率的編程工具。本文中列出一些常用的Python腳本,讓我們一起初步了解和學(xué)習(xí)Python吧。

一、Python語法簡單

先舉兩個例子,讓大家見識它簡潔的語法

1.計算1到100的整數(shù)和

s = 0 # 定義一個和參數(shù)
for n in range(0,101): # n是從1每次加1,直到遍歷到100,
    s += n # 相當(dāng)于s+n的和再賦值給s
print(s) # 打印結(jié)果 5050

2.溫度轉(zhuǎn)換實例代碼

TempStr = input('輸入帶有符號的溫度值:') # 例如20C或20F
if TempStr[-1] in ['F', 'f']:
    # eval()函數(shù):評估函數(shù),去掉參數(shù)最外側(cè)引號并執(zhí)行余下語句的函數(shù)
    C = (eval(TempStr[0:-1]) -32)/1.8 # 溫度轉(zhuǎn)換公式
    print('轉(zhuǎn)換后的溫度:{:.2f}'.format(C))
if TempStr[-1] in ['C', 'c']:
    F = 1.8*eval(TempStr[0:-1]) + 32 # 溫度轉(zhuǎn)換公式
    print('轉(zhuǎn)換后的溫度:{:.2f}'.format(F))
else:
    print('輸入有誤')

二、文件讀寫操作實例

  1. 日志文件分析工具代碼
# log.txt 
# a b 30 c
# e f 40 g

try:
# 打開文件錯誤,執(zhí)行except
    f = open('log.txt', 'r') # 以只讀方式打開文件
    
    avg = 0 # 平均值
    cnt = 0 # 行數(shù)
    
    for line in f: # 識別每行
        ls = line.split() # 分割日志每行的數(shù)值
        cnt += 1 # 行數(shù)加1
        avg += eval(ls[2]) # 先求溫度值之和
    print('平均溫度是:{:.2f}'.format(avg/cnt))
    f.close() #關(guān)閉文件
    
except:
    print('文件打開錯誤')

2.文件詞語頻次統(tǒng)計

import jieba # 引入jieba庫
f = open('神雕俠侶.txt' ,'r', encoding='utf-8') # 打開神雕俠侶文件
txt = f.read() # 一次性讀出文件
f.close() 
ls = jieba.lcut(txt) #分析文本保存到ls列表中
d = {} #定義一個字典變量
for w in ls:
    d[w] = d.get(w,0) + 1 # 找到某詞,其對應(yīng)的次數(shù)加1
for k in d:
    print('{}出現(xiàn){}次}'.format(k, d[k]))

三、常用庫應(yīng)用實例

  1. time庫

time庫是python中處理時間的標(biāo)準(zhǔn)庫,其中一些基本概念有

  • 計時起點:1970年1月1日0時0分0秒,time.gmtime(0)獲得
  • UTC時間:世界標(biāo)準(zhǔn)時間,與GMT一致
  • DST時間:夏令時時間,源于系統(tǒng)底層C函數(shù)
  • struct_time:python中用于保存時間對象、帶有屬性標(biāo)簽的數(shù)據(jù)類型
import time

# 時間獲取
time.time()  # 返回一個從計時起點開始的表示時間的浮點數(shù),簡單來說是時間戳1557990476.2949965
time.gmtime(s) # 返回一個struct_time,如果提供參數(shù)s(浮點數(shù)時間戳),把參數(shù)s變成stuct_time
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=16, tm_hour=7, tm_min=8, tm_sec=29, tm_wday=3, tm_yday=136, tm_isdst=0)
time.localtime(s) # 返回一個struct_time表示的本地時間,如果提供參數(shù)s(浮點數(shù)),則把參數(shù)s變成本地時間
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=16, tm_hour=15, tm_min=10, tm_sec=11, tm_wday=3, tm_yday=136, tm_isdst=0)
time.mktime(time.gmtime()) # mktime把struct_time轉(zhuǎn)換成浮點數(shù)1557961821.0
time.asctime(t) # 返回一個字符串表示的時間,如果提供參數(shù)t(struct_time),則把參數(shù)變成字符串時間
'Thu May 16 15:11:47 2019'
time.ctime(s) # 返回一個字符串表示的時間,如果提供參數(shù)s(浮點數(shù)類型),則把參數(shù)變成字符串時間
'Thu May 16 15:11:51 2019'

2.random庫
random庫主要用于產(chǎn)生隨機數(shù)

# import random

# 基本隨機函數(shù)
random.seed(a =None) # 初始化給定的隨機種子,默認(rèn)為當(dāng)前系統(tǒng)時間

random.random() # 生成一個[0.0, 1.0]之間的隨機小數(shù)

random.getstate() # 返回隨機數(shù)生成器的內(nèi)部狀態(tài),元組類型

random.setstate(state) # 設(shè)計隨機數(shù)生成器內(nèi)部狀態(tài),該狀態(tài)從getstate()函數(shù)獲得

3.re庫

正則表達(dá)式本質(zhì)是簡潔表達(dá)一組字符串的表達(dá)式

# 上述正則表達(dá)式代表病毒片段
# 任何文件可以表示為十六進(jìn)制字符的組合形式
# 匹配:病毒引擎的掃描過程

import re, random, time

segma = '0123456789ABCDE'  # 十六進(jìn)制字母表
def genStr():   # 隨機產(chǎn)生字符串
    s = ''
    global segma  # 全局聲明
    for i in range(32):  # 逐一生成隨機字符
        s += segma[random.randint(0,15)]
    return s

regex = re.compile(r'[1-2][^2-8][D-F]0+[A-F]')  # 編譯正則表達(dá)式
count = 0   # 猜測次數(shù)
start = time.perf_counter()   #計時功能 
match = regex.search(genStr())  # 正則表達(dá)式查找
while not match:
    count += 1
    match = regex.search(genStr())  # 不停匹配

print('共掃描了{(lán)}個文件,匹配到{}-{}'.format(count, match.string, match.group(0))
end = time.perf_counter()
print('發(fā)現(xiàn)數(shù)據(jù),共用時{:.5f}秒'.format(end -start))

4.os庫的使用

實現(xiàn)基本的操作系統(tǒng)交互功能

import os
os.system("c:\\windows\system32\calc.exe") # 運行計算器程序
0   # 命令啟動的返回值為0

5.filecmp庫的使用

提供比較目錄和文件的功能

import filecmp
filecmp.cmpfiles('d:\\app', 'e:\\app', ['abc', 'def/abc'])
# 比較d:\\app\\abc和e:\\app\abc  d:\\app\\def\\abc和e:\\app\def\\abc

6.sys庫

維護一些與python解釋器相關(guān)的參數(shù)變量

import sys
sys.argv
# 命令行參數(shù)的列表,其中argv[0]表示執(zhí)行程序本身

7.getopt庫

getopt庫提供解釋命令行參數(shù)sys.argv的功能

import getopt, sys
try:
    # -h -v -i <文件.ico> --dispath <目錄> --clean
    opts, args = getopt.getopt(sys.argv[1:], 'hi:v', ["dispath=", "clean"]) # 解析參數(shù)
    for o, a in opts: # 如果是對應(yīng)的命令參數(shù)則打印
        if o == '-h':
            print('find -h')
        elif o == '-v':
            print('find -v')
        elif o == '-i':
            print('find -i {}'.format(a))
        elif o == '--dispath':
            print('find --dispath {}'.format(a))
        elif o == '--clean':
            print('find --clean')
        else:
            print('unknown value')
except getopt.GetoptError:
    print('value to error')

四、常用組合類型應(yīng)用實例

  • 集合(無序、非一致、無索引):可變集合(set)、不可變集合(frozenset)
  • 序列(有序、非一致/一致、序號索引):元組、列表、字符串、字節(jié)串
  • 字典(無序、非一致、自定義索引):字典

1.集合類型

  • 可變集合set():集合元素的個數(shù)可以增加或減少
  • 不可變集合frozenset():集合創(chuàng)建后不可改變
# 創(chuàng)建可變集合
A = {'P', 'Y', 123}
B = set('pypy123') # 七個字符構(gòu)成七個元素
A-B # {123}
B-A # {'3', '2', '1'}

# 創(chuàng)建和表示不可變集合類型
A = frozenset("pypy123")
frozenset({'2','3','p','y','1'})
# frozenset()函數(shù)創(chuàng)建,表示為frozenset({})形式

2.序列類型

# 元組類型

# 創(chuàng)建后一般不能被修改的數(shù)據(jù)類型
# 逗號或()或tuple()函數(shù)創(chuàng)建
a = tuple('pypy123')
# ('p','y','p','y','1','2','3')
b = 123,456
# (123, 456)
# 列表類型

# 創(chuàng)建后可以隨時被修改的序列類型
# []或list()函數(shù)創(chuàng)建
a = list('py123')
# ['p','y','1','2','3']
b = [123,456]
# [123,456]
# 字典類型

# {}或dict{}函數(shù)創(chuàng)建
# 空{(diào)}創(chuàng)建字典類型,而不是集合類型
d = {'CHINA':'beijing', 'AMERICA':'Wastinton', 'FRANCE':'Paris'}
# {'CHINA':'beijing', 'AMERICA':'Wastinton', 'FRANCE':'Paris'}
d['CHINA']
# 'beijing'
e = {}
type(e)
# {dict}

3.二維數(shù)據(jù)的表示與處理

二維數(shù)據(jù)的存儲方式:

  • 元數(shù)據(jù)(自定義數(shù)據(jù))
  • excel格式
  • 數(shù)據(jù)庫格式
  • csv格式(從應(yīng)用廣泛性角度,csv格式好)任何數(shù)據(jù)管理軟件都能導(dǎo)出csv文件
# 從CSV格式文件中讀數(shù)據(jù)

fo = open(fname)
ls = []
for line in fo:
    # 把每行形成的列表當(dāng)作一個元素
    line = line.replace('\n', '')
    ls.append(line.split(','))
fo.close()
# 將數(shù)據(jù)寫入csv格式的文件

ls = [[1,2,3],[2,3,4],[3,4,5]] # 二維列表
f = open(fname, 'w')
for item in ls:
    f.write(','.join(item) + '\n') # 將每個列表元素本身寫入csv一行中
f.close()
# 二維數(shù)據(jù)的逐一處理

采用二層循環(huán)
ls = [[],[],[]] # 二維列表
for row in ls:
    for column in row:
        print(column)  #處理代碼

上述實例只使用了Python面向過程的知識。其它還有面向?qū)ο?、計算生態(tài)構(gòu)建、多語言生態(tài)構(gòu)建以及更加專業(yè)化的精深知識。

但我認(rèn)為,以上已足夠應(yīng)付一般的自動化腳本編程需要。學(xué)習(xí)也可以先完成再完美,通過工作中的實際應(yīng)用提起學(xué)習(xí)興趣后,再深入研究,也未嘗不可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容