圈子
圈子是互相影响,走着走着就散了。
道不同不相为谋,与人的认知相关。
圈子如何正向引导?
圈子能决定你的人生走向。
圈子能决定你的格局。
01 昨日内容回顾
序列化模块
将一个数据结构 ----> 特殊的字符串(用于网络传输) 序列化过程
特殊的字符串 ------> 原数据结构 反序列化过程
json 所有语言通用,
python数据结构:int str bool list(tuple)dict
两对四个
1,json.dumps() json.loads() 网络传输 多个数据写入文件
2,json.dump() json.load() 单个数据写入文件
dic {1: 'alex'}
字典中的字符串全部都是双引号。
pickle : python语言之间的序列化模块 支持python所有数据类型 对象
两对四个
1,pickle.dumps() pickle.loads() 网络传输
2,pickle.dump() pickle.load() 数据(多个)写入文件
shelve
通过类似于字典的操作方式将数据写入文件。
hashlib : 加密模块,摘要算法 一系列加密算法的集合。
对字符串 -----> 数字的过程。
无论字符串多大 -----> 数字长度一样。
相同的字符串 转化的结果一样。
过程不可逆。
MD5 sha sha 数字越大 密文越长 耗时越长,安全系数越高。
ret = hashlib.md5()
ret.update('aelx'.encode('utf-8'))
ret.hexdigest()
加盐
ret = hashlib.md5('更复杂一些')
ret.update('aelx'.encode('utf-8'))
ret.hexdigest()
动态加盐
ret = hashlib.md5('更复杂一些')
ret.update('aelx'.encode('utf-8'))
ret.hexdigest()
import hashlib
username = 'alex'
password = '123'
salt = lambda x: x + 'sb'
ret = hashlib.md5(salt(username).encode('utf-8'))
ret.update(password.encode('utf-8'))
print(ret.hexdigest())
sha
1,密码的加密。
2,文件的校验。
os,sys, collections.
02 包
函数过多了,我可以分模块文件去管理函数,模块文件过多,要将模块文件分类,放在一个一个的文件夹中,
这个文件夹就叫做包,组织机构更加清晰合理。
包就是文件夹。
模块就是被别人去使用,包既然是一些模块文件的集合,也是被被人去调用。
文件:
1,被别人使用。
2,当作脚本自己使用。
执行文件运行时,会将执行文件的当前目录加载到sys.path列表中。
03 random 模块
04 shutil
# 02 昨日知识点回顾 # import hashlib # username = 'alex'# password = '123'# salt = lambda x : x + 'sb'# ret = hashlib.md5(salt(username).encode('utf-8'))# ret.update(password.encode('utf-8'))# print(ret.hexdigest()) # 03 包 # 回顾 执行一个模块会发生三件事# 1,创建一个以模块名命名的名称空间。# 2,执行模块代码将模块里面的代码加载到模块名命名的名称空间的内存中。# 3,调用模块内的名字必须通过模块名. 的方式调用。 # 创建一个名为aaa的包# import aaa# 包也是模块,他是模块的集合体,所以引用包也会发生三件事情:# 1,创建一个以包名命名的名称空间。# 2,执行包中的__init__文件,将__init__里面的代码块加载到以包名明命的名称空间的内存中。# 3,调用包内的名字必须通过包名. 的方式调用。# print(aaa.x)# print(aaa.y)# aaa.func1()# print(aaa.m2)# print(aaa.m2.xx)# aaa.m2.func2()# print(aaa.bbb) # 在aaa文件夹下创建名为bbb的包# 想要在此文件引用 bbb包的m3模块 怎么做?# 第一步 在此文件 import aaa# 第二步:在aaa 的 __init__ 添加 from aaa import bbb# 第三步:在bbb 的 __init__ 添加 from aaa.bbb import m3# 完成以上三步,那么我在此执行文件就可以引用bbb包的m3模块里面的名字。# aaa.bbb.m3.func3() # 上面的需求满可以这么做:# from aaa.bbb import func3# m3.func3() # 总结:# from a.b import c .的左边一定是个包,import 后面一定一个具体的名字# 包里面的__init__ 如果想要引用模块必须是 from ....import ... 不能直接 import# from a.b.c.d import e.f.g 错误# from a.b.c.d import e # 04 相对导入绝对导入 ??? # 绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入# 优点: 执行文件与被导入的模块中都可以使用# 缺点: 所有导入都是以sys.path为起始点,导入麻烦 # 相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入# 符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹# 优点: 导入更加简单# 缺点: 只能在导入包中的模块时才能使用 # from nb import m1# import nb# print(m1.f1())# nb.m1.f1() # 05 random import random# print(random.random()) # 大于0且小于1之间的小数# print(random.uniform(1,3)) # #大于1小于3的小数# print(random.randint(1,5)) # 大于等于1且小于等于5之间的整数# print(random.randrange(1,10,2)) # 10以内的奇数# print(random.choice(['alex','wusir','日天'])) # 多选一# print(random.sample(['alex','wusir','日天','太白'],2)) # 多选多# l1 = [1, 2, 3, 4, 5]# random.shuffle(l1)# print(l1) # 题目# 生成随机验证码# 5个字符:0~9 数字, a~z的字母# '1qw34'# 选择1~9:# random.randrange(10) # 随机数字# 先从97 ~122 随机选择一个数字然后用chr表示字母# print(chr(122)) ## 二选任意一个字符 # import random# str_ = ''# for i in range(5):# num = str(random.randrange(10))# str1 =chr(random.randrange(97,122))#大写65-92# sum = random.choice([num,str1])# str_ += sum# print(str_) # 随机字符串# def get_code():# code = ''# for i in range(5):# num = str(random.randrange(10))# s = chr(random.randint(97,122))# s_b = chr(random.randint(65,90))# single_s = random.choice([num, s, s_b])# code += single_s# return code # print(get_code()) # 06 shutil import shutil# 将文件内容拷贝到另一个文件中# shutil.copyfileobj(open('log1','r'),open('log2','w'))# 复制文件# shutil.copyfile('log1','log.bak') # shutil.copytree('NB1','nbb',ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) # 打包?压缩?import shutilimport timeimport tarfile# 打包文件# shutil.make_archive('NB1%s' %time.strftime('%Y-%m-%d'),'gztar',root_dir='NB1') # 解压# t = tarfile.open('NB12019-01-10.tar.gz','r')# t.extractall('ttt')# t.close()