python自动化运维培训学习记录-day2

day02  基础二

一、 .pyc 文件简介

3版本中   .pyc 会 移到    __pycache__ 目录下,名称 为  *.cpython-32.pyc

java是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成及其文件,所以JAVA是一种先编译后解释的语言

python和Java/c# 一样,也是一门基于虚拟机的语言,

而python执行时先自动编译,执行py 脚本时,其实是激活了python的解释器,告诉解释器,你要开始工作了,可在解释之前,其实执行的第一项工作和java一样,是编译 ,python也是 先编译后解释的语言

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当python程序运行结束时,python解释器则将PyCodeObjec写回到.pyc文件, .pyc 字节码文件,python解释器读懂,  当程序第二次运行时,首先寻找.pyc文件,如果找到,则直接载入。可以说 .pyc文件是 PyCodeObject 的一种持久保存方式

而手动执行的 py脚本不会生成.pyc  ,模块导入时 会生成。 且 会比对 .py  和 ,pyc 文件最新时间,如果 .py 修改了,则重新生成 .pyc

二、列表

1、切片

name[0:2]

name[起始位置:终止位置]      如 name[-5:-1]     -1 是最后一个   name[-5:]      name[-1:-5]则向右出界了

name.insert(2,‘123‘)          //插入到 2 这个位置,值为 123

name.append(‘123‘)

name.remove(‘123‘)     //删除值

del  删除内存中的数据,可以用来删除 列表中多个元素   del name[4:6]

del name    删除整个列表

print(name[0:-1:2])      2为步长,隔一个输出一个 这里有  -1 标示 最后一个如果正好隔位输出时,是不会打印的

print(name[::2])     整个列表,2为步长,隔一个输出一个

print(99 in name)       // 列表中是否存在 99   返回 True 或 False

name.count(‘a‘)              //返回列表中 a 的个数

name.clear()           // 清空列表

name.extend(name2)       //合并列表,将 name2列表追加到name后

name.reverse()       //反转列表

name.sort()      //排序 (3的版本中,当列表中元素既有数据又有字符时会报错)

name.pop(2)      //删除下标为2的元素,如不填则默认删除最后一个

name.copy(name2)    // 拷贝 name列表,生成新的 name2 ,注:修改第一层的元素时,互相不影响,如果有嵌套的列表等,修改其中一个会影响到另一个列表,即列表中只是保存的嵌套的列表的内存地址。

import copy

name2=copy.copy(name)        // 效果和 name.copy()  一致

要完全拷贝列表,应使用  name2=copy.deepcopy(name)

id(name)    // 查看内存地址

直接赋值列表    name2=name     //则完全指向同一个地址,name和 name2 任何一个元素修改都会影响对方

len(name)      // 列表长度

元组  : 不可变列表

list((123,234,22))      //把元组转换为列表

注:原理,list类的初始化函数 __init__  中使用 for循环将元素取出来生成列表

三、字符串操作

分类:移除空白、分割、长度、索引、切片

string.strip()       //去掉空白

string.strip(‘\n‘)      //单除掉换行

string.split(‘,‘)      //按逗号 拆分字符串为列表

‘|‘.join(list)       //合并列表中各元素,以 | 分割

string[2:4]     //字符串切片

格式化字符串

msg=‘hello , {name},{age}‘

msg2=msg.format(name=‘Min‘,age=32)

msg=‘hello,{0},{1}‘

msg.format(‘Min‘,32)

name.center(40,‘*‘)                   //整个字符串扩展为 40个字符,并用 * 均匀填充

‘my name is !‘.center(40,‘*‘)

string.find(‘a‘)         //返回a字母的下标,多个a只返回第一个,返回 -1 表示没有找到

name.isdigit()      //判断是否是数字,且name必须为字符串

if name.isdigit():      返回 Ture 执行下面语句

name=int(name)

else:

print(‘invalid data type‘)

name.isalnum()       // 如包含特殊字符则返回False

name.endswith(‘df‘)     // 判断是否已 df 结尾

name.startswith(‘dfs‘)    // 判断是否以 dfs 开头

name.upper()       // 转换为大写输出

name.lower()      //转换为小写输出

四、数据运算

10%2    返回余数

10//2    返回整数

/           除法

赋值运算

+=              // c+=a  等效于  c=c+a

-=              // c-=a  等效于 c=c-a

*=              // c*=a   等效于 c=c*a

.......

逻辑运算

and       or      not

成员运算

in          not in

身份运算

is       判断2个标示符是不是引用自一个对象

x is y   如果 id(x) 等于 id(y)   返回结果 1

is not    判断2个标示符是不是引用自不同对象

位运算

&  按位与运算符       |  按位或运算符     ^ 按位异或

~ 按位取反        << 左移动      >> 右移动

五、字典

key:value   形式, key 必须唯一,如有重复的只会选择一个,字典是无序的,因为key没有固定顺序

del namedict[‘addr‘]     //删除 addr 建及值

namedict.pop(‘addr‘)

namedict.get(‘addr‘)      //取出键值,且如果键不存在,会返回 None 但不会报错

namedict[‘addr‘]       //如键不存在,则会报错,中断运行

namedict.update(dict)                 //使用 dict字典完全覆盖 namedict

namedict.items()      //将字典转换为列表,且键值对 放入元组中

namedict.values()     //打印字典中所有的值

namedict.keys()         //打印字典中所有的键

namedict.has_key(‘addr‘)     //在2版本中判断键是否存在

‘addr‘ in namedict

namedict.setdefault(‘addr‘,‘beijing‘)  //如果键存在则取出它的值,如果键不存在则添加 addr:beijing  键值对

namedict.fromkeys([1,2,3],‘ddd‘)    //将列表中的值转换为字典中的键,值都为 ddd

返回结果  {1:‘ddd‘,2:‘ddd‘,3:‘ddd‘}

与namedict字典本身没有关系,只是借用了 字典的方法

namedict.popitem()      //随机删除键值对

字典循环取值

方法1:效率低,因为有一个字典转列表的过程

for k,v in namedict.items():

print(k,v)

方法2:

for key in namedict:

print(key,name[key])

enumerate 函数

用于遍历序列中的元素以及它们的下标

a=[‘a‘,‘b‘,‘c‘]

for index,i in enumerate(a):

print(index,i)

返回结果:

(0,‘a‘)

(1,‘b‘)

(2,‘c‘)

输出加颜色

31 红色   32 绿色   33黄色

\033[31;1m  %s  \033[0m

六 、 set 集合

set  无序,不重复的序列

se={‘123‘,‘345‘,‘456‘}                    //创建一个集合

se=set()                     //创建一个空集合

sl=set(li)                   //将 li列表转换为集合(可将列表中重复的项去除)

se.add(123)            //添加元素

se.clear()                 //清除所有内容

se.copy()             // 浅拷贝

se.discard(11)        //将11元素移除,如元素不存在也不报错

se.remove(11)     //将11元素删除,如元素不存在则会报错

ret=se.pop()               //随机删除一个元素,且会将移除的值赋值给 ret  无参数

集合操作

s1={11,22,33}

s2={22,33,44}

s3=s1.difference(s2)          //s3中保存 s1中存在,s2中不存在的元素

s3=s1.symmetric_difference(s2)     //对称差集,s3中保存除s1 s2 共有元素外的元素

s1.difference_update(s2)

s1.symmetric_difference_update(s2)        //先找出差异值然后更新到s1中,即s1的值和以上例子中的s3的值一致

s3=s1.intersection(s2)            // 获取s1和s2的交集

s1.intersection_update(s2)

s3=s1.union(s2)                    //获取2者的并集

s1.isdisjoint(s2)               //判断2者是否有交集

li=[11,22,33,44,111]

s1.update(li)     //加个可迭代的参数批量添加元素。注 可迭代的对象,即可使用for循环取值的对象,如列表

实用代码:

比较新旧字典的不同,并更新旧字典

new_set =set(new_dict.keys())

old_set=set(old_dict.keys())

remove_set=old_set.difference(new_set)

add_set=new_set.difference(old_set)

update_set=old_set.intersection(new_set)

时间: 2024-10-13 13:11:18

python自动化运维培训学习记录-day2的相关文章

python自动化运维培训学习记录-day1

day01  基础一 一.概述 C  语言   代码编译得到机器码,在处理器上直接执行,每条指令控制CPU工作 其他语言  代码编译得到字节码,虚拟机执行字节码并转换成及其码再到处理器上执行 JAVA虚拟机 JVM     python虚拟机 PVM python版本 CPython   由C语言实现,官方版本 JPython    由JAVA实现, 好处是 可以掉很多JAVA的库 IronPython  由C#实现 .... 2.7版本 过度版本,只支持到 2020年,会直接换到起码 3.4版

Python自动化运维课程学习--Day2

本文为参加老男孩Python自动化运维课程第二天学习内容的总结. 大致内容如下: 1.python模块初识 2.python程序运行流程 3.python数据类型(只讲了numbers, bool, strings, bytes, list, tuple, dict, set) 4.python数据运算 0.关于本文中所有运行Python代码的环境: --操作系统:Ubuntu 16.10 (Linux 4.8.0) --Python版本:3.5.2 --Python IDE: PyCharm

Python自动化运维课程学习--Day3

本文为参加老男孩Python自动化运维课程第三天学习内容的总结. 大致内容如下: 1.文件操作 2.字符编码转码相关操作 3.函数 0.关于本文中所有运行Python代码的环境: --操作系统:Ubuntu 16.10 (Linux 4.8.0) --Python版本:3.5.2 python2.7.12 --Python IDE: PyCharm 2016.3.2 一.文件操作: 1.文件操作流程:以只读.写(覆盖写).追加写.读写.追加读写.二进制读写等模式打开文件 ==> 得到文件句柄,并

Python自动化运维Django入门

随着IT运维技术日益更新,近几年运维自动化越来越火,而且学习python的人非常的火爆,尤其是python自动化运维开发,得到了很多前辈的推崇,尤其是老男孩培训中心.老男孩老师.Alex老师等,在这里非常感谢你们. 这里我也记录一下以前学习Django的一点点心得和方法,方便以后自己查阅,如果能帮助初学者是最好的了!好的,其他不多说了,博文滴走起. 一.系统实战环境 系统版本:CnetOS6.5 x86_64 Django版本:Django-1.5.8 MySQL版本:MySQL-5.1.73

电子书 Python自动化运维:技术与最佳实践.pdf

本书在中国运维领域将有"划时代"的重要意义:一方面,这是国内一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的作者是中国运维领域的"偶像级"人物,本书是他在天涯社区和腾讯近10年工作经验的结晶.因为作者实战经验丰富,所以能高屋建瓴.直指痛处,围绕Python自动化运维这个主题,不仅详细介绍了系统基础信息.服务监控.数据报表.系统安全等基础模块,而且深入讲解了自动化操作.系统管理.配置管理.集群管理及大数据应用等高级功能.重要的是,完整重现了4个

Python自动化运维开发活动沙龙(2015-07-11周六)

Python自动化运维开发活动沙龙 2015-07-11(周六) 场地限制,最多仅限50人参加,报名从速! 亲,已是2015年了,做为运维工程师的你还在手动装机器.配服务.看监控.帮开发人肉上线么?还在发愁如何把每天重复的工作自动化起来么?还在想对开源软件进行二次开发定制却无能为力么?还在对开发人员提出的各种无理需求想进行反驳却因为自己不懂开发却被人鄙视么?还在为自己天天努力工作.到处救火却每月只能挣个十来K而感到不爽么? Maybe yes,maybe no! 但是不要不爽了,你的工资不高是因

python自动化运维之路~DAY7

python自动化运维之路~DAY7 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.客户端/服务器架构 C/S 架构是一种典型的两层架构,其全称是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据:另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信. C/S 架构也可以看做是胖客户端架构.因为客户端需要实现绝大多数的业务

python自动化运维之路~DAY10

python自动化运维之路~DAY10 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

python自动化运维之集中病毒扫描

1.因为我linux的python是2.6.6,所以因为有些模块是2.7的,先进行升级. 步骤地址:http://www.linuxidc.com/Linux/2014-07/104555.htm 2.安装pyclamd yum install -y clamav clamd clamav-update 安装clamavp的相关程序包 chkconfig --level 235 clamd on /usr/bin/freshclam pyClamd-0.3.15.tar.gz安装包安装 3.vi