zoukankan      html  css  js  c++  java
  • python基础-序列化模块,configparser模块,hashlib模块,subprocess模块

    一、序列化模块
    # 1、什么是序列化&反序列化# 内存中的数据类型---->序列化---->特定的格式(json格式或者pickle格式)
    #   内存中的数据类型<----反序列化<----特定的格式(json格式或者pickle格式)
    
    #   土办法:
    #   {'aaa':111}--->序列化str({'aaa':111})----->"{'aaa':111}"
    #   {'aaa':111}<---反序列化eval("{'aaa':111}")<-----"{'aaa':111}"
    # 2、为何要序列化
    #   序列化得到结果=>特定的格式的内容有两种用途
    #   1、可用于存储=》用于存档
    #   2、传输给其他平台使用=》跨平台数据交互
    #        python                 java
    #         列表     特定的格式      数组
    
    #   强调:
    #       针对用途1的特定一格式:可是一种专用的格式=》pickle只有python可以识别
    #       针对用途2的特定一格式:应该是一种通用、能够被所有语言识别的格式=》json
    # 3、如何序列化与反序列化
    # 示范1
    # import json
    # # 序列化
    # json_res=json.dumps([1,'aaa',True,False])
    # # print(json_res,type(json_res)) # "[1, "aaa", true, false]"
    #
    # # 反序列化
    # l=json.loads(json_res)
    # print(l,type(l))
    # 示范2:
    import json
    
    # 序列化的结果写入文件的复杂方法
    # json_res=json.dumps([1,'aaa',True,False])
    # # print(json_res,type(json_res)) # "[1, "aaa", true, false]"
    # with open('test.json',mode='wt',encoding='utf-8') as f:
    #     f.write(json_res)
    
    # 将序列化的结果写入文件的简单方法
    # with open('test.json',mode='wt',encoding='utf-8') as f:
    #     json.dump([1,'aaa',True,False],f)
    
    
    # 从文件读取json格式的字符串进行反序列化操作的复杂方法
    # with open('test.json',mode='rt',encoding='utf-8') as f:
    #     json_res=f.read()
    #     l=json.loads(json_res)
    #     print(l,type(l))
    
    # 从文件读取json格式的字符串进行反序列化操作的简单方法
    # with open('test.json',mode='rt',encoding='utf-8') as f:
    #     l=json.load(f)
    #     print(l,type(l))
    
    
    # json验证: json格式兼容的是所有语言通用的数据类型,不能识别某一语言的所独有的类型
    # json.dumps({1,2,3,4,5})
    
    # json强调:一定要搞清楚json格式,不要与python混淆
    # l=json.loads('[1, "aaa", true, false]')
    # l=json.loads("[1,1.3,true,'aaa', true, false]")
    # print(l[0])
    
    # 了解
    # l = json.loads(b'[1, "aaa", true, false]')
    # print(l, type(l))
    
    # with open('test.json',mode='rb') as f:
    #     l=json.load(f)
    
    
    # res=json.dumps({'name':'哈哈哈'})
    # print(res,type(res))
    
    # res=json.loads('{"name": "u54c8u54c8u54c8"}')
    # print(res,type(res))
    # 4、猴子补丁
    # 一.什么是猴子补丁?
          属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。
          猴子补丁的核心就是用自己的代码替换所用模块的源代码,详细地如下
      1,这个词原来为Guerrilla Patch,杂牌军、游击队,说明这部分不是原装的,在英文里guerilla发音和gorllia(猩猩)相似,再后来就写了monkey(猴子)。
      2,还有一种解释是说由于这种方式将原来的代码弄乱了(messing with it),在英文里叫monkeying about(顽皮的),所以叫做Monkey Patch。
    
    
    # 二. 猴子补丁的功能(一切皆对象)
      1.拥有在模块运行时替换的功能, 例如: 一个函数对象赋值给另外一个函数对象(把函数原本的执行的功能给替换了)
    
    
    # 在入口处打猴子补丁
    # import json
    # import ujson
    #
    # def monkey_patch_json():
    #     json.__name__ = 'ujson'
    #     json.dumps = ujson.dumps
    #     json.loads = ujson.loads
    #
    # monkey_patch_json() # 在入口文件出运行
    
    
    # import ujson as json # 不行
    
    # 后续代码中的应用
    # json.dumps()
    # json.dumps()
    # json.dumps()
    # json.loads()
    # json.loads()
    # 5.pickle模块
    import pickle
    # res=pickle.dumps({1,2,3,4,5})
    # print(res,type(res))
    
    # s=pickle.loads(res)
    # print(s,type(s))

    configparser模块

    配置文件

    # 注释1
    ; 注释2
    
    [section1]
    k1 = v1
    k2:v2
    user=egon
    age=18
    is_admin=true
    salary=31
    [section2]
    k1 = v1

    读取

    import configparser
    
    config=configparser.ConfigParser()
    config.read('a.cfg')
    
    #查看所有的标题
    res=config.sections() #['section1', 'section2']
    print(res)
    
    #查看标题section1下所有key=value的key
    options=config.options('section1')
    print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']
    
    #查看标题section1下所有key=value的(key,value)格式
    item_list=config.items('section1')
    print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]
    
    #查看标题section1下user的值=>字符串格式
    val=config.get('section1','user')
    print(val) #egon
    
    #查看标题section1下age的值=>整数格式
    val1=config.getint('section1','age')
    print(val1) #18
    
    #查看标题section1下is_admin的值=>布尔值格式
    val2=config.getboolean('section1','is_admin')
    print(val2) #True
    
    #查看标题section1下salary的值=>浮点型格式
    val3=config.getfloat('section1','salary')
    print(val3) #31.0
    import configparser
    
    config=configparser.ConfigParser()
    config.read('test.ini')
    
    # 1、获取sections
    # print(config.sections())
    
    # 2、获取某一section下的所有options
    # print(config.options('section1'))
    
    # 3、获取items
    # print(config.items('section1'))
    
    # 4、
    # res=config.get('section1','user')
    # print(res,type(res))
    
    # res=config.getint('section1','age')
    # print(res,type(res))
    
    
    # res=config.getboolean('section1','is_admin')
    # print(res,type(res))
    
    
    # res=config.getfloat('section1','salary')
    # print(res,type(res))

    hashlib模块

    # 1、什么是哈希hash
    #    hash一类算法,该算法接受传入的内容,经过运算得到一串hash值
    #    hash值的特点:
    #I 只要传入的内容一样,得到的hash值必然一样
    #II 不能由hash值返解成内容
    #III 不管传入的内容有多大,只要使用的hash算法不变,得到的hash值长度是一定
    
    # 2、hash的用途
    # 用途1:特点II用于密码密文传输与验证
    # 用途2:特点I、III用于文件完整性校验
    
    # 3、如何用
    # import hashlib
    #
    # m=hashlib.md5()
    # m.update('hello'.encode('utf-8'))
    # m.update('world'.encode('utf-8'))
    # res=m.hexdigest() # 'helloworld'
    # print(res)
    #
    # m1=hashlib.md5('he'.encode('utf-8'))
    # m1.update('llo'.encode('utf-8'))
    # m1.update('w'.encode('utf-8'))
    # m1.update('orld'.encode('utf-8'))
    # res=m1.hexdigest()# 'helloworld'
    # print(res)
    
    
    
    # 模拟撞库
    # cryptograph='aee949757a2e698417463d47acac93df'
    # import hashlib
    #
    # # 制作密码字段
    # passwds=[
    #     'alex3714',
    #     'alex1313',
    #     'alex94139413',
    #     'alex123456',
    #     '123456alex',
    #     'a123lex',
    # ]
    #
    # dic={}
    # for p in passwds:
    #     res=hashlib.md5(p.encode('utf-8'))
    #     dic[p]=res.hexdigest()
    #
    # # 模拟撞库得到密码
    # for k,v in dic.items():
    #     if v == cryptograph:
    #         print('撞库成功,明文密码是:%s' %k)
    #         break
    
    
    # 提升撞库的成本=>密码加盐
    import hashlib
    
    m=hashlib.md5()
    
    m.update('天王'.encode('utf-8'))
    m.update('alex3714'.encode('utf-8'))
    m.update('盖地虎'.encode('utf-8'))
    print(m.hexdigest())

    subprocess模块

    mport subprocess
    
    obj=subprocess.Popen('echo 123 ; ls / ; ls /root',shell=True,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.PIPE,
                     )
    
    # print(obj)
    # res=obj.stdout.read()
    # print(res.decode('utf-8'))
    
    err_res=obj.stderr.read()
    print(err_res.decode('utf-8'))
    每天学习新的知识,会让自己更加充实
  • 相关阅读:
    Codeforces Round #649 (Div. 2) D. Ehab's Last Corollary
    Educational Codeforces Round 89 (Rated for Div. 2) E. Two Arrays
    Educational Codeforces Round 89 (Rated for Div. 2) D. Two Divisors
    Codeforces Round #647 (Div. 2) E. Johnny and Grandmaster
    Codeforces Round #647 (Div. 2) F. Johnny and Megan's Necklace
    Codeforces Round #648 (Div. 2) G. Secure Password
    Codeforces Round #646 (Div. 2) F. Rotating Substrings
    C++STL常见用法
    各类学习慕课(不定期更新
    高阶等差数列
  • 原文地址:https://www.cnblogs.com/fengpiaoluoye/p/14194227.html
Copyright © 2011-2022 走看看