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