• day16 常用模块 其他模块


     json 和 pickle模块

    1.0 什么是序列化和反序列化

      

     1 内存中的数据类型---->序列化---->特定的格式(json格式或者pickle格式)
     2     内存中的数据类型<----反序列化<----特定的格式(json格式或者pickle格式)
     3 
     4 以前常用办法:
     5     {'aaa':111} --->  序列化 str({'aaa':111})  ----->   "{'aaa':111}"
     6 
     7     {'aaa':111} <--- 反序列化 eval("{'aaa':111}")  <-----  "{'aaa':111}"
     8 编程举例:
     9     l1={'aaa':111} #字典 dict
    10     #序列化
    11     l2=str(l1)
    12     print(l2,type(l2))
    13     # 反序列化
    14     l3=eval(l2)
    15     print(l3,type(l3))
    2.0 为何要序列化
    1  序列化得到结果=>特定的格式的内容有两种用途
    2   1、可用于存储=》用于存档
    3   2、传输给其他平台使用=》跨平台数据交互
    4        python                 java
    5         列表     特定的格式      数组
    6 
    7   强调:
    8       针对用途1的特定一格式:可是一种专用的格式=》pickle只有python可以识别
    9       针对用途2的特定一格式:应该是一种通用、能够被所有语言识别的格式=》json
    3、如何序列化与反序列化
     1 示范1
     2 import json
     3 # 序列化
     4 json_res=json.dumps([1,'aaa',True,False])
     5 # print(json_res,type(json_res)) # "[1, "aaa", true, false]"
     6 
     7 # 反序列化
     8 l=json.loads(json_res)
     9 print(l,type(l))
    10 
    11 
    12 示范2:
    13 import json
    14 
    15 序列化的结果写入文件的复杂方法
    16 json_res=json.dumps([1,'aaa',True,False])
    17 # print(json_res,type(json_res)) # "[1, "aaa", true, false]"
    18 with open('test.json',mode='wt',encoding='utf-8') as f:
    19     f.write(json_res)
    20 
    21 将序列化的结果写入文件的简单方法
    22 with open('test.json',mode='wt',encoding='utf-8') as f:
    23     json.dump([1,'aaa',True,False],f)
    24 
    25 
    26 从文件读取json格式的字符串进行反序列化操作的复杂方法
    27 with open('test.json',mode='rt',encoding='utf-8') as f:
    28     json_res=f.read()
    29     l=json.loads(json_res)
    30     print(l,type(l))
    31 
    32 从文件读取json格式的字符串进行反序列化操作的简单方法
    33 with open('test.json',mode='rt',encoding='utf-8') as f:
    34     l=json.load(f)
    35     print(l,type(l))
    36 
    37 
    38 json验证: json格式兼容的是所有语言通用的数据类型,不能识别某一语言的所独有的类型
    39 json.dumps({1,2,3,4,5})
    40 
    41 json强调:一定要搞清楚json格式,不要与python混淆
    42 l=json.loads('[1, "aaa", true, false]')
    43 l=json.loads("[1,1.3,true,'aaa', true, false]")
    44 print(l[0])
    45 
    46 了解
    47 l = json.loads(b'[1, "aaa", true, false]')
    48 print(l, type(l))
    49 
    50 with open('test.json',mode='rb') as f:
    51     l=json.load(f)
    52 
    53 
    54 res=json.dumps({'name':'哈哈哈'})
    55 print(res,type(res))
    56 
    57 res=json.loads('{"name": "u54c8u54c8u54c8"}')
    58 print(res,type(res))
    4.0猴子补丁
     1 在入口处打猴子补丁
     2 import json
     3 import ujson
     4 
     5 def monkey_patch_json():
     6     json.__name__ = 'ujson'
     7     json.dumps = ujson.dumps
     8     json.loads = ujson.loads
     9 
    10 monkey_patch_json() # 在入口文件出运行
    11 
    12 
    13 import ujson as json # 不行
    14 
    15 后续代码中的应用
    16 json.dumps()
    17 json.dumps()
    18 json.dumps()
    19 json.dumps()
    20 json.dumps()
    21 json.dumps()
    22 json.dumps()
    23 json.dumps()
    24 json.loads()
    25 json.loads()
    26 json.loads()
    27 json.loads()
    28 json.loads()
    29 json.loads()
    30 json.loads()
    31 json.loads()
    32 json.loads()
    33 json.loads()
    34 json.loads()
    5.0 pickle模块
    1 import pickle
    2 res=pickle.dumps({1,2,3,4,5})
    3 print(res,type(res))
    4 
    5 s=pickle.loads(res)
    6 print(s,type(s))
    6.0 configparser 模块
     1 import configparser
     2 
     3 config=configparser.ConfigParser()
     4 config.read('test.ini')
     5 
     6 1、获取sections
     7 print(config.sections())
     8 
     9 2、获取某一section下的所有options
    10 print(config.options('section1'))
    11 
    12 3、获取items
    13 print(config.items('section1'))
    14 
    15 416 res=config.get('section1','user')
    17 print(res,type(res))
    18 
    19 res=config.getint('section1','age')
    20 print(res,type(res))
    21 
    22 
    23 res=config.getboolean('section1','is_admin')
    24 print(res,type(res))
    25 
    26 
    27 res=config.getfloat('section1','salary')
    28 print(res,type(res))
    
    
    7.0 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())
    
    
    
     m.update(文件所有的内容)
     m.hexdigest()
    
     f=open('a.txt',mode='rb')
     f.seek()
     f.read(2000) # 巨琳
     m1.update(文见的一行)
    
     m1.hexdigest()
    8.0subprocess模块
     1 import subprocess
     2 
     3 obj=subprocess.Popen('echo 123 ; ls / ; ls /root',shell=True,
     4                  stdout=subprocess.PIPE,
     5                  stderr=subprocess.PIPE,
     6                  )
     7 
     8 print(obj)
     9 res=obj.stdout.read()
    10 print(res.decode('utf-8'))
    11 
    12 err_res=obj.stderr.read()
    13 print(err_res.decode('utf-8'))
    
    
  • 相关阅读:
    Qt简介以及如何配置Qt使用VS2010进行开发
    QT里重定向另外一个控制台程序的输出
    windows下制作PHP扩展
    20款Notepad++插件下载和介绍
    音频编码协议介绍
    用 PHP 读取文件的正确方法
    QT进程间通信
    关于YUV色彩空间
    解析xml 四种
    System.getProperty
  • 原文地址:https://www.cnblogs.com/kwkk978113/p/13423243.html
Copyright © 2020-2023  润新知