zoukankan      html  css  js  c++  java
  • 23、常用模块二

    一、json与pickle模块

    1.1、什么是序列化和反序列化

      内存中的数据类型====》序列化====》特定的格式(json格式或者pickle格式)

      特定的格式(json格式或者pickle格式)====》反序列化====》内存中的数据类型

      土办法:

     {'aaa':111}--->序列化str({'aaa':111})----->"{'aaa':111}"
      {'aaa':111}<---反序列化eval("{'aaa':111}")<-----"{'aaa':111}"

    1.2、为什么要序列化

      序列化得到的结果====》特定的格式的内容有两种用途

      1.用于存储====》可以存档    

        使用途径 :可以是一种专用的格式,pickle只能在python上识别

      2.传输给其他平台====》用来跨平台数据交互

        使用途径:应该是一种通用的格式,json是一种可以被所有语言识别的格式

    1.3、怎么使用序列化和反序列化

    1.3.1、序列化     json。dumps()

    json_res=json.dumps([1,'aaa',True,False])
    # print(json_res,type(json_res)) # "[1, "aaa", true, false]"

    1.3.2、反序列化    json.loads()

    l=json.loads(json_res)
    print(l,type(l))

    二、configparser   模块

      该模块适用于配置文件的格式与Windows ini文件相似,可以包含一个或者多个标题(section),每个节可以有多个参数(key=value)

    import configparser
    
    config=configparser.ConfigParser()
    config.read('test.ini')      #  test。ini为python文件,里面的格式为节下面包含key=value

    2.1、查看所有标题    config.sectiongs()

    print(config.sections())

    2.2、获取某个section下的所有内容    config.sectiongs(*)以列表形式

    print(config.options('section1'))    #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']

    2.3、获取字典item       config.items()

    print(config.items('section1'))   #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]

    2.4、获取某个section下面,指定key对应value的值,并且以字符串的形式表示     config.get('section','key')

    #查看标题section1下user的值=>字符串格式
    val=config.get('section1','user')
    print(val) #egon

      2.5、获取某个section下面,指定key对应value的值,并且以数字的形式表示    config.getint('section','key')

    #查看标题section1下age的值=>整数格式
    val1=config.getint('section1','age')
    print(val1) #18

    2.6、获取某个section下面,指定key对应value的值,并且以布尔值的形式表示    config.getboolrean('section','key')

    #查看标题section1下is_admin的值=>布尔值格式
    val2=config.getboolean('section1','is_admin')
    print(val2) #True

    2.7、获取某个section下面,指定key对应value的值,并且以浮点型的形式表示   config.getfloat('section','key')

    #查看标题section1下salary的值=>浮点型格式
    val3=config.getfloat('section1','salary')
    print(val3) #31.0

    三、hashlib模块

    3.1、什么是哈希hash

      hash是是一种算法,该算法接收传入的值的内容,经过运算得到一串的hash值

      hash的特点:

            1.只要传入的值一致,得到的hash值也是一致的

            2.得到的hash值不能返回成原值

            3.不管传入的值有多大,只要hash算法不变,hash长度都是一致的

    3.2、hash的用途

      1.无法返回原值的特性可以作为密码密文的传输与验证

      2.长度以及内用不变性,可以作为文件完整性的检验

    3.3、hash怎么用

      先设定hash的类型,在使用  变量.update(str.encode())进行添加,   最后变量.hexdigest生成hash值

    import hashlib
    m=hashlib.md5()   #md5是hash的类型
    m.update('hello'.encode('utf-8'))   #使用update添加
    m.update('world'.encode('utf-8'))
    res=m.hexdigest() # 'helloworld'      #生成hash值
    print(res)

      只要是同样的内容,最终会生成同样的hash值

    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)

    3.4、模拟撞库

      先知道一个hash值,设置一系列的密码,将密码生成hash值,通过对比hash值是否一致,得到密码

    passwds=[
        'alex3714',
        'alex1313',
        'alex94139413',
        'alex123456',
        '123456alex',
        'a123lex',
    ]                       #先设定可能的密码
    
    dic={}              #设置空字典
    for p in passwds:    #循环
        res=hashlib.md5(p.encode('utf-8'))    #将可能的密码转换成hash值
        dic[p]=res.hexdigest()  #    存入字典中
    
    # 模拟撞库得到密码
    for k,v in dic.items():
        if v == cryptograph:     #找到的hash值
            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模块

      调用操作系统的命令    subprocess。Popen

    import subprocess
    判断操作系统中是否存在该文件
    obj=subprocess.Popen('echo 123 ; ls / ; ls /root',shell=True,
                     stdout=subprocess.PIPE,    #正确则执行
                     stderr=subprocess.PIPE,    #错误则执行
                     )
    
    print(obj)      #<subprocess.Popen object at 0x00000168D72C0A90>
    res=obj.stdout.read()    
    print(res.decode('utf-8'))    #123 ; ls / ; ls /root
     
    err_res=obj.stderr.read()      #该文件存在,则无输出
    print(err_res.decode('utf-8'))    
  • 相关阅读:
    推荐系统 蒋凡译 第一章 引言 读书笔记
    神经网络与深度学习 邱锡鹏 第5章 卷积神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第4章 前馈神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第3章 线性模型 读书笔记
    神经网络与深度学习 邱锡鹏 第2章 机器学习概述 读书笔记
    神经网络与深度学习 邱锡鹏 第1章 绪论 作业
    神经网络与深度学习 邱锡鹏 第1章 绪论 读书笔记
    算法笔记 上机训练实战指南 第13章 专题扩展 学习笔记
    算法笔记 第13章 专题扩展 学习笔记
    算法笔记 上机训练实战指南 第11章 提高篇(5)--动态规划专题 学习笔记
  • 原文地址:https://www.cnblogs.com/jingpeng/p/12608733.html
Copyright © 2011-2022 走看看