zoukankan      html  css  js  c++  java
  • 序列化与反序列化、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模块 正则表达式






















































  • 相关阅读:
    java多线程api
    java多线程
    java代理
    java程序员常用的linux命令
    java泛型
    java反射
    日期和时间
    java集合
    Nodejs mac版安装
    for in、each; for 、forEach、map
  • 原文地址:https://www.cnblogs.com/Holmes-98/p/14317453.html
Copyright © 2011-2022 走看看