序列化与反序列化、configparaer模块、hash、subprocess模块、logging模块
一、序列化
指的是把内存的数据类型转换成一个特定的格式【json格式/pickle格式】(用处1:.该格式的内容可用于存储======》用于存档(pickle只有python可以识别);用处2:传输给其他平台使用====》跨平台数据交互(通用的格式json)
json验证:json 兼容的是所有语言通用的数据类型,不能支持某种语言的所有数据类型。
如何系列化
import json json_res = json.dumps([12,'sad',True,False]) # 序列化 print(json_res) # [12, "sad", true, false] l = json.loads(json_res) # 反序列化 print(l) #[12, 'sad', True, False]
# 将系列化的结果写入文件方法一: json_res = json.dumps([12,'sad',True,False]) # with open(r'json.test',mode='wt',encoding='utf-8') as f: f.write(json_res) print(json_res) # [12, "sad", true, false] # 方法二: with open(r'json.test',mode='wt',encoding='utf-8') as f: json.dump([12,'sad',True,False],f)
# 从文件读取json格式的字符串进行放序列化操作方法一: l = json.loads(json_res) print(l) #[12, 'sad', True, False] # 方法二 with open(r'json.test',mode='rt',encoding='utf-8') as f: res = json.load(f) print(res) # [12, 'sad', True, False]
二、 猴子补丁
import json import ujson # 写在在入口文件处!!! def monkey_patch_json(): json.__name__ = 'ujson' json.dumps = ujson.dumps json.loads = ujson.loads
三、hashlib模块
什么是hash?
hash是一类算法,该算法接受传入的内容,经过一系列的运算得到一串hash值。
hash值的特点:
1.只要传入的内容一样,得到的hash值一定一样。
2. 只要hash算法是不变的,无论传的内容有多大,得到的hash值的长度是不变的。
3.不能根据hash值反推出传入的内容是什么(不能反解)
用途:
1.文件完整性的校验
2.密文密码的传输
使用方法:
port hashlib m = hashlib.md5() # md5是一种算法 m.update('h'.encode('utf-8')) # 传入的内容必须是bytes类型 m.update('e'.encode('utf-8')) # 切记不要一次性传入一个文件,容易导致内存溢出 m.update('l'.encode('utf-8')) m.update('l'.encode('utf-8')) m.update('o'.encode('utf-8')) res = m.hexdigest() print(res) #>>>>>>5d41402abc4b2a76b9719d911017c592
# 模拟库 crytograpg = 'bfd59291e825b5f2bbf1eb76569f8fe7'#抓包抓到的hash值 password = ['asd123', #密码库 'asd321', 'dsa123', 'dsa321'] import hashlib dic={} # 模拟密码字典 for p in password: res = hashlib.md5(p.encode('utf-8')) dic[p] = res.hexdigest() # 模拟撞库得到密码 for k,v in dic.items(): if v == crytograpg: print('撞库成功,明文密码是%s'%k)
四、subprocess 模块
import subprocess # 拿到程序的运行结果,存放在管道内 obj = subprocess.Popen('dir /json',shell =True, stdout = subprocess.PIPE,# 正确的结果 stderr=subprocess.PIPE, # 错误的结果!!!存放的不是同一个管道!! ) res = obj.stdout.read() print(res.encode('GBK')) # 查看结果,因为拿到的是bytes类型,所以要转成当前系统的编码格式 err_res = obj.stderr.read() print(err_res.encode('GBK'))
五、logging模块
5.1 创建日志字典 ,存放在配置文件中
5.2 拿到日志的产生者即logger来产生日志
import settings from logging import config,getLogger config.dictConfig(settings.LOGGING_DIC) logger1 = getLogger('kkk')
logfer1.info('这是logger1的日志内容')
日志名的命名
日志名是区分日志业务归属的一种非常重要的标志
日志轮转
日志记录着程序员运行过程中的关键信息(存放日志的文件内容达到一定值后重命名)
六、re模块 正则表达式