序列化与反序列化、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模块 正则表达式






















































 

posted @ 2021-01-28 22:05  HolmesWu  阅读(141)  评论(0编辑  收藏  举报