一、包的使用(****)
1、什么是包?
包是一个含有__init__.py文件的文件夹,本质就是一个模块,是用来被导入的
2、为何要有包?
首次导入包这种模块,发生两件事
(1)创建模块的名称空间,运行包下的__init__.py的文件,将运行过程中产生的名字都丢入模块的名称空间中
(2)在当前位置拿到一个名字aaa,该名字指向__init__.py的名称空间,即aaa.名字,名字是来自于__init__.py中
代码:略
3. 相对导入: 只能在包的目录下
绝对导入 :参照的是包的顶级目录,只要在sys.path里面就行
4.相对导入简单方法: .代表当前文件,..代表当前文件的上一级,...代表上一级的上一级,依次类推。
ps:环境变量参照执行文件路径,sys.path参照的是调用者的环境变量
二、json&pickle(*****)
1、什么是序列化与反序列化
内存中某一类的数据---------------》特殊的格式
内存中某一类的数据《---------------特殊的格式
2、为何要序列化
1、存档:把内存中的数据持久化到硬盘
2、跨平台交互数据
在python中:
存档=》推荐用pickle格式
跨平台交互=》推荐用json格式
3、如何序列化
3.1 low版本的序列化与反序列化方式
1.序列化 items=["圣剑","蝴蝶","BKB"] dic_str=str(items) with open('db.txt',mode='wt',encoding="utf-8") as f: f.write(dic_str) 2.反序列化 with open('db.txt',mode='rt',encoding='utf-8') as f: data=f.read() # "['圣剑', '蝴蝶', 'BKB']" items=eval(data) print(items[0])
3.2:json
优点:跨平台交互数据
缺点:无法识别所有的python数据类型(集合识别不了)
注意:json格式的字符串里的内容不能包含单引号
序列化:dump/dumps
反序列化:load/loads
import json # 序列化方式一: t={"a":1,"b":2} # 字典=======》json格式的字符串:"[1,2,3]" res=json.dumps(t) print(res,type(res)) with open("a.json",mode='wt',encoding='utf-8') as f: f.write(res) # json反序列化方式一: with open("a.json",mode='rt',encoding='utf-8') as f: data=f.read() dic=json.loads(data) print(dic,type(dic)) res=json.loads('{"k1":111}') print(res['k1']) # json序列化方式二: t={"a":1,"b":2} # 字典=======》json格式的字符串:"[1,2,3]" with open("b.json",mode='wt',encoding='utf-8') as f: json.dump(t,f) # json反序列化方式二: with open("b.json",mode='rt',encoding='utf-8') as f: dic=json.load(f) print(dic,type(dic))
3.3:pickle
优点:可以识别所有python类型
缺点:只能用于python中,无法跨平台交互
import pickle s = {1,2,3,4,5} #序列化: res=pickle.dumps(s) print(res,type(res)) with open('a.pkl',mode='wb') as f: f.write(res) #反序列化 with open('a.pkl',mode='rb') as f: data=f.read() s=pickle.loads(data) print(type(s))
也可用dump load
XML跟json差不多,比较笨重麻烦
三、hashlib
hash是一种算法(md5sha256sha512等),我们为该算法传入内容,该算法会计算得到一串hash值
hash值具备以下三个特点:
1、如果传入的内容一样,并且采用hash算法也一样,那么得到个hash值一定是一样的
2、hash值的长度取决于采用的算法,与传入的文本内容的大小无关
3、hash值不可逆
ps:文件校验要选取点去校验
import hashlib #1 m=hashlib.md5() m.update("你好".encode('utf-8')) m.update("egon".encode('utf-8')) m.update("哈哈哈".encode('utf-8')) # "你好egon哈哈哈" res=m.hexdigest() print(res) #2 m1=hashlib.md5("你".encode('utf-8')) m1.update("好eg".encode('utf-8')) m1.update("on哈哈哈".encode('utf-8')) # "你好egon哈哈哈" res=m1.hexdigest() print(res) #总结:#1与#2的长度一样 m2=hashlib.md5() with open('aaa.png',mode='rb') as f: for line in f: m2.update(line) print(m2.hexdigest()) #再加密(加盐) pwd="123" m3=hashlib.md5() m3.update("天王盖地虎".encode('utf-8')) m3.update(pwd.encode('utf-8')) m3.update("小鸡炖蘑菇".encode('utf-8'))