• python学习----8.13-shelve-xml-configparser-hashlib


    shelve模块

      是什么

        一个用于序列化的模块

        为什么

        使用pickle和json都需要与文件打交道

        为了更加方便而退出的另一种序列化方式

         怎么用

         1.open

         2.以key-value方式进行存取

         3.close

         总结 

         可以存储python所有基础数据

         只需要指定文件名字即可,使用方法与字典类型相同

         其实该模块时是对pickle模块的封装,使其更简单

    import shelve
    
    s1=shelve.open('shelvetest.txt')
    s1['date']='8-13'
    s1['list1']='123','456'
    s1.close()
    
    
    
    s2=shelve.open('shelvetest.txt')
    print(s2.get('list1'))
    print(s2.get('date'))
    View Code

    xml模块

      什么是xml

           是一种标记语言(计算机能识别的文本)

        xml有什么用

           制定了一种文本书写规范,是的计算机能够轻松识别这些数据就和python一样

         为什么不直接用python语言啦进行传输,计算机识别起来太费劲(语法太多,变化太复杂)所以需要一种更简单的解决方案

        xml语法标准

         一、任何的起始标签都必须有一个结束标签。

         二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<百度百科词条/>。xml解析器会将其翻译成<百度百科词条></百度百科词条>。

         三、标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签。这好比是将起始和结束标签看做是数学中的左右括号:在没有关闭所有内部括之前,是不能关闭外面的括号的。

         四、所有的特性都必须有值。

         五、所有的特性都必须在值得周围加上双引号

        总结

         xml是一种数据格式遵循一定书写规范,用于多个平台之间的数据交换,和json的作用是一样的

         使用场景:配置文件、常规的数据交换,例如从服务器获取一段新闻

         与json的区别:

             作用 一样都是一种数据个数

             xml比json诞生早

             json的数据比xml小

             目前json是主流

       python中的xml

         1.标签的组成

            <tagname attributename="value">text<subtags/></tagname>

         2.数据分析(拿到想要的数据)

         3.代码生成xml文档

         4.数据的修改

         导入核心模块

            import xml.etree.ElmentTree  表示节点数

         数据分析

            Elment核心成员

              tag  attrib  text

            常用方法

              Elment

              getchildren()获取所有子标签

              find     从子标签中获取名字匹配的第一个子标签

              findall  从子标签中获取名字匹配的所有子标签

              iter      从子全文中获取名字匹配的所有标签 返回迭代器

              get      获取指定属性的值

              append  删除子标签

              remove  添加删除子标签

              ElmentTree

              parse  文本文件转对象

                             dump   对象转文本

              write   写入

              getroot  获取根标签

          生成xml

            创建节点

            添加内容

            转为节点数

            写入文件

          

    """
        用代码生成一个xml文档
    
    """
    import xml.etree.ElementTree as et
    # 创建根标签
    root = et.Element("root")
    # 创建节点树
    t1 = et.ElementTree(root)
    
    # 加一个peron标签
    persson = et.Element("person")
    persson.attrib["name"] = "yyh"
    persson.attrib["sex"] = "man"
    persson.attrib["age"] = "20"
    persson.text = "这是一个person标签"
    
    root.append(persson)
    
    # 写入文件
    t1.write("newXML.xml",encoding="utf-8",xml_declaration=True)
    View Code

    configparser

        配置文件解析模块,用于提供程序运行所需要的一些信息的文件  后缀ini  cfg

         用处:方便用户修改,例如超时时间

         配置文件内容格式

            只包括两种元素

            section   分区

            option   选项

            一个文件可以有多个section

            一个section可以有多个选项

        核心功能

        1.section 获取所有分区

        2.options  获取所有选项

        3.get  获取一个值     传入    section   option

        注意:大小写不敏感

    # 假装做一个下载功能 最大链接速度可以由用户来控制  用户不会看代码 所以提供一个配置文件
    import configparser
    # 得到配置文件对象
    cfg = configparser.ConfigParser()
    # 读取一个配置文件
    cfg.read("download.ini",encoding='utf-8')
    
    print(cfg.sections())
    print(cfg.options("section1"))
    
    print(type(cfg.get("section1","maxspeed")))
    print(type(cfg.getint("section1","maxspeed")))
    print(cfg.getint("section2","minspeed"))
    
    
    # 修改最大速度为2048
    cfg.set("section1","maxspeed","1024")
    
    cfg.write(open("download.ini","w",encoding="utf-8"))
    
    cfg.read("download.ini",encoding='utf-8')
    print(cfg.getint("section1","maxspeed"))
    View Code

    hashlib

      hash是什么?

          是一种算法

          用于将任意长度的数据,压缩映射到一段固定长度的字符(提取特征)

          hash的特点:

            1.输入不同的数据,得到的hash值有可能不同 

            2.不能通过hash值来得到输入的值

            3.如果算法相同,无论输入的数据长度是多少,得到的hash长度相同

            综上特点,hash算法用于加密和文件校验

            加密方式有很多,常用的一种hash算法是MD5

            常用的提升安全性的手段就是加盐

            就是把你加密前的数据做一些改动,例如把顺序反过来

    import hashlib
    
    md=hashlib.md5()
    md.update('哈哈哈哈'.encode('utf-8'))
    print(md.hexdigest())
    
    
    #
    #
    #
    # # 今后我们在写一些需要网络传输的程序时 如果要进行加密  最好把加密的算法搞得更复杂
    # # 密码长度为6位
    # # abcdef
    # # 在前面加一个  abc  在后面加一个 cba 完事以后在加密
    #
    pwd='abcdef'
    md1=hashlib.md5()
    md1.update('123'.encode('utf-8'))
    md1.update(pwd.encode('utf-8'))
    md1.update('456'.encode('utf-8'))
    print(md1.hexdigest())
    
    
    
    #必须加盐才能加密
    import hmac
    
    h=hmac.new('556677'.encode('utf-8'))
    h.update('abcd'.encode('utf-8'))
    print(h.hexdigest())
    View Code

        

        

  • 相关阅读:
    疲劳的一天
    Singleton模式与对象池的假设....
    没有杀死我的 (创伤心理学简介)
    Python深入03 对象的属性
    协议森林14 逆袭 (CIDR与NAT)
    Python深入05 装饰器
    协议森林06 瑞士军刀 (ICMP协议)
    数据可视化的秘密
    协议森林
    协议森林13 9527 (DNS协议)
  • 原文地址:https://www.cnblogs.com/Liu-guang-hui/p/9470165.html
Copyright © 2020-2023  润新知