day19

今日学习内容

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')
原文地址:https://www.cnblogs.com/yaoxiaofeng/p/9468691.html