网工Python之路之基础笔记(一)
转载:知乎朱嘉盛“网工手艺”专栏
https://www.zhihu.com/people/zhu-jia-sheng-71
《网工工程师python之路》作者王印,知乎艺名:弈心
B站视频课程链接:https://www.bilibili.com/video/BV1gf4y1p7Kz
哈喽,大家好!我是朱嘉盛,一名普通的网工,我手头运维的设备华为偏多,目前重点关注华为设备。我有弄个微信群以便交流(后台回复“网工手艺”)。大家可以先看@弈心大神的视频,然后再看笔记,笔记会加上一些我自己的感悟。
我接触 Python 若干年了,找过很多资料,看过不少教程,很多一上来就是介绍各种牛逼的 IDE 环境玩转炫技,一下子把身为小白的我给镇住了又镇住了,走了不少弯路,幸好一直有坚持走下来。
个人觉得网工或普通上班族,不要把 Python 当成一门专业编程语言,而是把它当成一个像 word、excel、ppt 等办公软件(我相信没有人先系统地上了三剑客的培训课程后再去编辑word制作excel吧?),以“实验和实战”为导向,边做边学边积累。
观察@弈心教学思路,以最简单的 IDLE 、txt 文本等开始,实验也是以最简单的开始,然后一点点拨开知识点,尽量避免初学者因各种 IDE 干扰项而退缩。
好吧,接下来,我将坚持把我自己学习大神的视频教程内容,结合自己的感悟,从零基础开始,整理一下学习笔记,一来自己加深知识点印象,二来希望能帮助到零基础想入门的朋友们。不过他更新实在有点快,我自己精力实在有限,明显跟不上节奏。哈
Python 的安装比较人性化,windows 基本傻瓜安装,跟安装个应用软件类似。
Python 的版本,基本 Python3 以上就好,能新点就不要太旧,也不用最新,我自己目前用3.7.3(其实就是随便下载个 64 位 windows 版本然后一路点“下一步”安装完成的。)
在程序运行中能变的叫变量;不变的叫常量。
【常量】
相对于其它语言(如C 等),Python 并没有严格定义常量这个概念。约定俗成用全大写表示。如 PI (圆周率 π),MAX_BYTES(TCP 窗口大小 65535)
【变量】
1、变量随用随写,不用事先申明,可以来回赋值不同类型的值,切换自如,所以说 Python 很方便。除把变量理解成一个篮子装东西外,我更喜欢把变量理解成一个标签纸,赋值给谁就贴在谁的头上。
2、变量可以大小写、下划线开头,不要以数字,特殊符号开头。建议咱们日常以小写字母开头且能见名知意就好,不要太标新立异搞特殊符号。
3、变量名是区分大小写的,比如 Aa、AA、aA 是不同的变量。
4、Python 的保留字不能用做变量,比如 def 、while 、for ……。很难全记住不过也没必要全记住,其实咱们敲下去的时候,是保留字的会变颜色!
大致类似,在 Python 初学者来说甚至可以混用这个概念,我们可以把它们当成是生产工具,给点什么生产资料下去,然后就可以生产出我们要的产品来。
函数不需要跟对象关联,方法需要跟对象关联。换个说法,用到方法,我们需要说用到【谁的】方法,而函数不用。再换个说法,函数一般需要参数,方法不一定要参数。(这个可能要感悟琢磨一下哈,现在不理解无所谓,按“生产工具”加“生产原料”输出“产品”来理解即可吧。)
查看对应类型的方法,找找 upper 和 lower 的方法。
其实呢,方法可以是类和对象的概念,类里面有属性和方法,暂不扯远。无论函数还是方法,都可以理解成前人经验总结后,封装好了做了一个整理归纳和沉淀,我们现在要什么功能就相应调用就可以了。比如轮子有了,底盘有了,方向盘有了,发动机有了,那我们就开始组装车辆轻松上路吧。
小结:
文首我自己吹牛说自己弄Python"若干年"了,这期内容看起来很基础很基础了,我跟着指令敲起来、笔记做起来,依然还是有些东西是新学到的。我们学习就是要动起来,光看视频不操作的话效果非常有限,一定要结合实践,做点笔记,边做边学。
1.字符串的表示
单引号 ''
双引号 ""
三引号 ''''''
引号必须得是英文字符,误用中文字符会报错。如字符长度短的,用单引号或双引号(三引号也行),但是不要混用,即不要一边单引,一边双引或三引。如字符长度长,要跨行那种,一般都用三引号。
@弈心 大神用了登录信息演示三引号。我们换个方式吧,所谓暮春时节说杜甫嘛,来来来,我们来读下与课本不一样味道的杜诗吧。我特喜欢诗的前 4 行。Python 字符串的三引符号可以用在这里,顺便留意下 print() 和交互模式直接敲变量名输出的差异哦。(注:'\n'表示换行。)
顺便说个小技巧,比如交互模式下 print(vendor1) 执行完,要输 print(vendor2),需要重新敲吗?IDLE 可以按 Alt+p 键调用历史命令,可按多次调出更早前的历史命令。
2. 字符串的拼接
字符串拼接用 + 号,主要类型要是 str ,字符串类型,结果也是字符串类型。
有时候遇到一些非字符串类型的变量需要拼接,如数值 int 类型等,可以先将其转换成字符串,然后再按上面的套路,用 + 号进行拼接处理。
3. 字符串的方法
字符串的方法超级无敌多,平时也用不了那么多,关键是常用的能掌握,很特殊的要用到会查怎么用。这里先从常见的字符串方法入手吧。
upper()
upper() 方法是把字符串变量里是英文的无论大小写,统统给变成大写,然后返回一个新的对象。特别注意,它是返回个结果而已,原来的变量是啥,依然是啥,它还是从前那个少年,没有一丝丝改变。(这块大神没说,我说了哈哈哈,这一块 Python 有类似于深拷贝、浅拷贝,是否原值返回等,后面有机会慢慢再说,一下子说太多也不好,不紧张慢慢来。)
lower()
与upper()类似的,就是变小写而已,文字的从略,实操的也来耍一把吧。
strip()
去掉一个字符串左右两边的特定字符串(默认是空格,其实也可以是别的字符),然后新返回。strip()的同门师兄弟还有:rstrip()去掉右边,lstrip()去掉左边。
如果左右两边不是空格,我们怎么处理呢?我们知道华为数通设备配置的 “#” 神多= =,其实就是在 strip() 的括号里填入'#'就可以了,'#'是这个 strip() 方法的参数,把'#'放进去的过程叫做传递参数过程,简称“传参”。
好了,bytheway,这种把字符串变大写变小写去掉某字符截取一部分等骚操作,用一个时髦一点的词语就是“数据清洗”,或者说“洗一下数据”,如果配合 SQL 数据库就可以说是“数据清洗后入库”,“洗一下数据后回填入库”。这些“术语”“行话”是不是听起来感觉就高大上很多了哈哈?现在咱们尽量还是说大白话,但是入门后,咱们就可以说点行话了,至少能听懂。
count()
count() 方法返回字符串里面含有多少个()里面的参数,注意这个方法一定要带参数(argument),否则会报错。
谈到了 count() ,@弈心大神在视频中提了 len() 函数,这个其实不是字符串的方法,所以在使用的时候不是【字符串.方法()】的形式,而是【函数(字符串)】的形式,这个就是上一篇提到的函数和方法确实是有区别,但又好像没什么区别,又好像可以混用。来,好好感受下!!!
谈到了 len() ,大神在视频中随口又提了 input()函数,这个其实也不是字符串的方法。同 len()一样,这个函数在工程中也频繁使用。
startswith()、endswith()
从前面的例子顺着下来,童鞋们应该有点感觉了吧?“望文生义”也能知道个七七八八了。这里主要说一下 Python 有个数值类型叫布尔类型(bool),返回的是 True(1)、False(0),主要是用来做判断的。startswith() 就是判断字符串是否以()内参数开头。同理,好基友 endswith() 非常相似,不再赘述。
isdigit()
说到布尔值,马上继续再推进,Python 方法中,一般以 is 开头的,通常返回值就是个布尔值,用来做判断的。isdigit() 方法是判断一个字符串(注意,它已经是一个字符串了),内容是不是可以表示1个整数数字,这个有点绕,做实验好好感受一下。
isalpha()
isdigit() 方法判断是否为纯整数数字,isalpha() 方法则是来判断是否为纯字母的,他们的操作对象都是字符串,字符串,字符串。
跟着视频再敲了一遍,笔记再做了一遍,又有新知,又有新感悟了。其实 Python 的字符串方法和函数还非常多,一下子写太长,看太长意义也不大。还是用起来,再实验和实际生产中应用感悟再应用再感悟吧。
对于网络工程师来说,字符串在解析设备报文和制作脚本上有重大意义,必须熟练掌握。如果字符串相关操作能叠加配合上正则表达式的话,那很多问题处理起来就会有更好的“哇哇哇”体验。
最后,关于“正则表达式”,我讲一个听过的笑话娱乐下吧。
程序员A遇到 1 个问题苦思冥想中,这时程序员B建议:“我觉得这个问题可以用正则表达式来解决”。于是程序员A就有了 2 个问题了。
5中类型(布尔型、整型、长整型、浮点型、复数) ,对于咱们网工来说,重点掌握前面三种。
【整型】不带小数点的正数或负数。比如设备的端口数、槽位数量等。
【浮点型】带小数点的正数或负数。比如内存利用率、链路利用率、CPU利用率、温度湿度等。
【布尔型】真(True,1);假(False,0),通常用作判断,配合分支语句,比如链路利用率超 70%,CPU利用率超过 50%,维度超过 65°C……,怎么判断超过这些数值,就得用到判断分支语句。这里先按下不表,以后说。
+ | - | * | / | // | ** | % |
加 | 减 | 乘 | 除 | 地板除 | 求幂 | 取余 |
六、
运算符与字符串互动:
1、字符串与【*】联动,如下:
2、分割线妙用,如下:
3、字符串与【+】联动,如下:
4、统计,累加
假设个应用场景:一个企业有 1000+ 台交换机,里面有部分是华为的,部分是思科的,现在需要统计华为多少台,思科多少台。当然,你可以去机房现场数哈。远程的话,在网络通,用户名密码正常的情况下,Python 安装 paramiko 或者 netmiko 模块可一台一台登陆设备采集设备类型,版本号等信息,根据交换机回显的内容来分析(这过程术语叫“报文解析”),一台一台判断是何种厂家的设备,在对应进行累加计算。
本节重点数值类型,数值运算法的使用,对循环遍历,分支判断,第三方 paramiko 或者 netmiko 模块等配合使用简化处理( Duang 的一下,意念上搞定了),避免干扰本节的学习重点。
这节课内容不多,但很基础较零散。我们在学习数值类型及数值运算后,紧接着马上跟我们前两节学习的变量、字符串的相关知识联动起来练习。大概学习的过程也就这样吧——新知识推进,新老知识联动,老知识得以巩固,曲折螺旋前进。前进虽曲折,但只要动起来,就会不断前进,加油吧!
range()
大神视频中说 range(5) 如果在 Python2 的话,直接是返回一个列表 [0,1,2,3,4],但是我们已经是 Python3 了,后面估计也一般不用接触到 Python2,知道有这个情况就好。在 Python3 中,range(5) 返回的是一个 range 类型对象。
(如果直接返回列表,会消耗计算机资源,比如 range(1000000000),妈呀,这个直接返回一个巨长的列表,卡卡卡卡啊,所以 Python3 做了优化。)
index()
append()
insert()
pop()
len()
count()
小结:
概念
定位元素
增加、修改元素
删除元素
方法和函数:
len()
keys()
values()
items()
pop()
get()