常用模块(三)
一、shelve模块
1、shelve模块也是一种序列化模块,内部使用的是pickle模块,所以也存在跨平台性差的问题
2、特点:
只要提供一个文件名即可
读写的方式和字典一样
将数据以类似字典的形式在文件中读写
3、应用场景
在单击的程序中使用
4、使用方法
(1)序列化
1 import shelve 2 3 s1= shelve.open(‘a.txt‘) # 打开文件 4 s1[‘week‘]=["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"] 5 s1[‘person‘]={"name": "Zero", "age": 8, "height": 180} # 写操作 6 s1.close() # 关闭文件
(2)反序列化
1 import shelve 2 3 s2 = shelve.open(‘a.txt‘) # 打开文件 4 print(s2.get(‘week‘)) 5 print(s2.get(‘person‘)) 6 print(s2.get(‘person‘)[‘age‘]) # 读取文件中内容 7 s2.close() # 关闭文件
二、xml模块
1、XML全称:可扩展标记语言,标记指的是代表某种含义的字符 XML<>
2、为什么要用xml
(1)为能够在不同的平台间继续数据的交换
(2)为了使交换的数据能让对方看懂,就需要按照一定的语法规范来书写
3、语法格式
(1)任何的起始标签都必须有一个结束标签。
<tagname></tagname>
<tagname></tagname>
<tagname/> 简化写法
(2)可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/)。
例如<ABC/>:XML解析器会将其翻译成<ABC></ABC>。
(3)标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不 能关闭外面的括号的。
1 <tag1> 2 <tag2> 3 <tag3> 4 </tag3> 5 </tag2> 6 </tag1>
(4)所有的特性都必须有值。
特性指的是属性
1 <person name="aaa"> 2 </person>
(5)所有的特性都必须在值的周围加上双引号。
4、注意点
(1)最外层有且只有一个标签,这个标签为根标签
(2)第一行应该有文档声明,用于高速计算机怎么理解
例如:<?xml version="1.0" encoding="utf-8"?>
1 <person> 2 <sut1> 3 </stu1> 4 <sut2> 5 </stu2> 6 </person>
标签嵌套
5、使用场景:
(1)配置文件
(2)常规的数据交换。 例如从服务器获取一段新闻
6、方法及属性
(1).ElementTree 表示整个文件的元素树 (2.)Element 表示一个节点 a.属性 text 开始标签和结束标签中间的文本 attrib 所有的属性 字典类型 tag 标签的名字 b.方法 get 获取某个属性的值 1.解析XML 查找标签 find 在子标签中获取名字匹配第一个 findall 在子标签中获取名字匹配的所有标签 iter(tagname) 在全文中查找[匹配的所有标签 返回一个迭代器 2.生成XML 用ElmentTree parse() 解析一个文件 getroot() 获取根标签 write() 写入到文件 3.修改xml set 一个属性 remove 一个标签 append 一个标签
1 import xml.etree.ElementTree as et 2 3 # 读取xml文档到内存中 得到一个包含所有数据的节点树 4 # 每一个标签就称之为一个节点 或 元素 5 tree = et.parse("text.xml") 6 7 # 获取根标签 8 root = tree.getroot() 9 10 # 获取所有的country 11 print(root.find("country")) # 找的是第一个 12 print(root.findall("country")) # 找的是所有 13 14 # 获取字标签 15 print(root.iter("country")) 16 for i in root.iter("country"): 17 print(i) 18 19 # 遍历整个xml 20 for country in root: 21 print(country.tag,country.attrib,country.text) 22 for t in country: 23 print(t.tag, t.attrib, t.text) 24 25 print(root.find("country").get("name"))
遍历
7、增删改查
1.解析XML 查找标签 find 在子标签中获取名字匹配第一个 findall 在子标签中获取名字匹配的所有标签 iter(tagname) 在全文中查找[匹配的所有标签 返回一个迭代器 2.生成XML 用ElmentTree parse() 解析一个文件 getroot() 获取根标签 write() 写入到文件 3.修改xml set 一个属性 remove 一个标签 append 一个标签
1 # 读取到内存 2 tree = et.parse("text.xml") 3 for country in tree.findall("country"): 4 yeartag = country.find("year") 5 yeartag.text = str(int(yeartag.text) + 1) 修改标签文本 6 7 country.remove(country.find("year")) 删除标签 8 9 # 添加子标签 10 newtag = et.Element("newTag") 11 # 文本 12 newtag.text = "123" 13 #属性 14 newtag.attrib["name"] = "DSB" 15 #添加 16 country.append(newtag) 17 18 # 写回到内存 19 tree.write("text.xml",encoding="utf-8",xml_declaration=False)
增删改查
8、生成xml文档
1 import xml.etree.ElementTree as et 2 # 创建根标签 3 root = et.Element("root") 4 # 创建节点树 5 t1 = et.ElementTree(root) 6 7 # 加一个peron标签 8 persson = et.Element("person") 9 persson.attrib["name"] = "yyh" 10 persson.attrib["sex"] = "man" 11 persson.attrib["age"] = "20" 12 persson.text = "这是一个person标签" 13 14 root.append(persson) 15 16 # 写入文件 17 t1.write("newXML.xml",encoding="utf-8",xml_declaration=True)
生成
三、hashlib模块
1、hashlib分为hash和library
(1)hash
①.hash为一种算法,用于将任意长度的数据压缩映射到一段固定长度的字符 (提取特征)
②.特点
a.输入数据不同,得到的hash值有可能相同
b.不能通过hash值来得到输入的值
c.如果算法相同,无论输入的数据长度是多少,得到的hash值长度相同
③.作用
常用的提升安全性的手段,用于数据的加密,MD5是常用的一种hash算法
(2)library
2、利用hashlib加密
1 import hashlib 2 md = hashlib.md5() 3 md.update("hello".encode("utf-8")) 4 print(md.hexdigest())
加密
3、解密
破解MD5可以尝试撞库
原理: 有一个数据库里面存放了常见的明文和密文的对应关系
四、configparser模块
1、configparser模块是配置文件解析模块,用于提供程序运行所需要的一些信息的文件。 后缀 .ini,.cfg
2、配置文件内容格式
只包括两种元素:
section 分区
option 选项
一个文件可以有多个section
一个section可以有多个选项
3、核心方法
sections() 获取所有分区 options() 获取所有选项 get(section,option) 获取一个值
4、配置文件
1 import configparser 2 3 # 得到配置文件对象 4 cfg = configparser.ConfigParser() 5 6 # 读取一个配置文件 7 cfg.read("download.ini") 8 9 print(cfg.sections()) 10 print(cfg.options("section1")) 11 12 print((cfg.get("section1","maxspeed"))) 13 print((cfg.getint("section1","maxspeed"))) 14 print(cfg.getint("section2","minspeed")) 15 16 17 # 修改最大速度为2048 18 cfg.set("section1","maxspeed","2048") 19 20 # 修改后写入文件 21 cfg.write(open("download.ini","w",encoding="utf-8"))
配置文件
原文地址:https://www.cnblogs.com/linagcheng/p/9469692.html