今日学习内容
1、shelve模块
2、XML模块
3、configparser模块
4、hashlib模块
shelve模块:
什么是shelve模块?
一种序列化方式,使用方法简单,读写方法与字典一致,可以把他当成自动序列化的字典
序列化数据:
##################################
变量名 = shelve.open('文件名')
变量名[字典key值] = key值对应的内容
变量名.close()
#####################################
反序列化数据:
#####################################
变量名 = shelve.open('文件名')
print(变量名.get('key值'))
configparser模块:
configparser是什么?
配置文件解析模块
什么是配置文件?
用于提供程序运行所需要的一些信息的文件(后缀:ini,cfg)方便用户更改
配置文件内容格式:
只包括两种元素:section分区,option选项(一个文件可以有多个section,一个section可以有多个option)
核心功能:
获取所有分区.section()
获取所有选项.option()
获取一个之.get()
查看配置文件内容
################################
cfg = configparser.ConfigParser()
cfg.read(文件名,enconding='utf-8')
查找分区中的所有分区
print(cfg.sections())
查找分区中的所有选项
print(cfg.option(分区名))
查找分区中的一个选项的值
print(cfg.get(分区名,选项名))
#################################
修改配置文件的值
#################################
cfg.read(文件名)
cfg.set(分区名,选项名,修改后的值)
cfg.write(open(文件名,打开文件方式,字符编码选择))
#################################
hashlib模块:
什么是hashlib?
散列函数
用于将任意长度的数据,压缩到一段固定长度的字符(提取特征)
hash的特征:
1、输入数据不同,得到的hash值可能相同
2、不能通过hash值来得到输入的值
3、如果算法相同,无论输入的数据长度是多少,得到的hash值长度相同
因为以上特点常将hash算法用于加密和文件校验
破解MD5可以尝试撞库(原理里面存了明文和密文的对应关系)
XML模块:
import xml
# 什么是XML
# 可扩展标记语言(标记指的是代表某种含义的字符)
# 为什么需要xml?
# 为了能够在不同的平台间继续数据的交换。
# 为了使交换的数据让对方看懂,就需要按照一定的语法规范来写
# XML语法格式:
# 1、任何的起始标签必须有一个结束标签
# 2、可以采用另一种简化方式,可以在一个标签中间时表示起始标签和结束标签。
# 3、标签嵌套
# 4、所有特性必须有值
# 5、所有的特性必须在值的周围加上双引号
import xml.etree.ElementTree as et
# 找到文件
tree = et.parse('a.xml')
# 找到根标签
root = tree.getroot()
# 三种查找结点的方式
# 在整个树中进行查找,而且查找到所有
res = root.iter('rank')
for i in res :
print(i.tag)
print('*'*50)
print(i.attrib)
print('*' * 50)
print(i.text)
# find只能在当前元素的下一级开始查找,并且只找到一个就结束
res = root.find('country')
print(res)
print(res.tag)
print(res.attrib)
print(res.text)
nh = res.find('neighbor')
print(nh.attrib)
# find只能在当前元素的下一级开始查找,并且找到所有。
cy = root.findall('country')
print([i.attrib for i in cy])
# ======================================改
import xml.etree.ElementTree as et
tree = et.parse('a.xml')
root=tree.getroot()
for i in root.iter('year'):
i.text =str(int(i.text)+10)
i.attrib = {'updated':'yes'}
tree.write('b.xml')
# ======================================增
import xml.etree.ElementTree as et
tree = et.parse('a.xml')
root = tree.getroot()
for country in root.iter('country'):
year = country.find('year')
if int(year.text) > 2010:
print(country.attrib)
ele = et.Element('yxf')
ele.attrib = {'nb':'true'}
ele.text = '厉害'
country.append(ele)
tree.write('b.xml')
# ======================================增
import xml.etree.ElementTree as et
tree = et.parse('a.xml')
root = tree.getroot()
for i in root.iter('country'):
year = i.find('year')
if int(year.text)>2010:
i.remove(year)
tree.write('b.xml')