常用模块补充
补充内容:shelve模块 xml模块 configparser模块 hashlib模块
一:shelve模块:也是一种序列化方式。 (序列化就是将内存中的数据持久化到硬盘)
shelve模块的特点:使用方法比较简单,提供一个文件名字就可以开始读写,读写的方法和字典一致,你可以把它当成带有自动序列化功能的字典
使用方法: 1:open
2:读写
3:close
原理:内部使用的是pickle,所以也存在跨平台性差的问题,你自己存的只有你自己知道怎么取。
使用场景:写一个单机程序时可以考虑。
例:
import shelve
#序列化
# sl = shelve.open("shelvetest.txt")
# sl["date"] = "8-13" #运行会产生三个文件
# sl["list1"] = ["123","456"] #运行会产生三个文件(.bak .dat .dir)
# sl.close()
#反序列化
# s2 = shelve.open("shelvetest.txt")
# print(s2.get(("date"))) #会显示出8-13
# print(s2.get("list1")) #会显示出["123","456"]
# s2.close()
=======================================================
二:xml模块:全称:可扩展标记语言,标记指的是代表某种含义的字符。
xml有什么用: 为了能够在不同的平台间进行数据的交换,为了使交换的数据能让对方看懂,就需要按照
一定的语法规范来书写。
xml的语法格式:
1:任何的起始标签都必须有一个结束标签。
2:可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于
符号之前紧跟一个斜线。 例如 <百度词条/>
3:标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签。
4:所有的特性(属性)都必须有值。
5:所有的特性都必须在值的周围加上双引号。
使用场景:1:配置文件 2:常规的数据交换(例如:从服务器获取一段新闻)
注意:最外层有且只有一个标签,这个标签称之为根标签。第一行应该有文档声明,用于告诉计算机
怎么理解 (例:<?xml version="1.0" encoding="utf-8" ?>)
总结:xml是一种数据格式,遵循一定书写规范,用于多个平台之间的数据交换,和json的作用是一样的,json的数据比xml小,
xml比json先诞生,目前json是主流。
python中的xml处理:
使用到的模块:
ElmentTree 表示整个文件的元素树
Elment 表示一个节点 属性:
1.text 开始标签和结束标签中间的文本
2.attrib 所有的属性 字典类型
3.tag 标签的名字
常用的方法:get 获取某个属性的值
1:解析xml :
查找标签:find 在子标签中获取名字匹配第一个
findall 在子标签中获取名字匹配的所有标签
iter(tagname) 在全文中查找匹配的所有标签,返回一个迭代器
2:生成xml :用ElmentTree
parse() 解析一个文件
getroot() 获取根标签
write() 写入到文件
3:修改xml :
set 一个属性
remove 一个标签
append 一个标签
===============================================================================
三:configparser模块: 配置文件解析模块
什么是配置文件:用于提供程序运行所需要的一些信息的文件。通常后缀为:ini , cfg
配置文件有什么作用:方便用户修改。一些参数我们不能在代码中写死,这样扩展性太低,修改
需求时必须修改源代码,太麻烦。
配置文件内容格式:只包括两种元素
1:section 分区
2:option 选项
一个文件可以有多个section,一个section可以有多个选项。
核心功能:1:sections 获取所有分区
2:options 获取所有选项
3:get 获取一个值,传入section option
======================================================================
四:hashlib模块:hash是一种算法,用于将任意长度的数据压缩映射到一段固定长度的字符(提取特征)
hash的特点:
1:输入数据不同,得到的hash值有可能相同
2:不能通过hash值来得到输入的值
3:如果算法相同,无论输入的数据长度是多少,得到的hash值长度相同
因为以上特点,常将hash算法用于加密和文件检验
加密的方式有很多,常用的MD5就是一种hash算法
常用的提升安全性的手段,就是加盐,就是把你加密前的数据做一些改动。 例如 把顺序反过来
破解MD5可以尝试撞库 原理: 有一个数据库 里面存放了常见的明文和密文的对应关系 ,
所以我可以拿着一个密文取数据库中查找,有没有已经存在的明文 ,如果有撞库成功 ,能不能破解凭运气
假设我已经拿到了一个众多账号中的一个密码 ,我可以那这个密码,挨个测试你的所有账号 ,可能不能碰到运气
加密实际上能做的就是让黑客的的破解成本大于他的利润
例:
import hashlib
md = hashlib.md5()
md.update("hello你这么牛逼吗 你破解我试试? DSB".encode("utf-8"))
print(md.hexdigest())
pwd_dic = {"123456":"e10adc3949ba59abbe56e057f20f883e","hello":"5d41402abc4b2a76b9719d911017c592"}
for i in pwd_dic:
if pwd_dic[i] == "5d41402abc4b2a76b9719d911017c592":
print(i)
pwd = "abcdef"
md2 = hashlib.md5()
md2.update("121".encode("utf-8"))
md2.update(pwd.encode("utf-8"))
md2.update("akjasjkasa".encode("utf-8"))
print(md2.hexdigest())
import hmac
h = hmac.new("121212".encode("utf-8"))
h.update("abcd".encode("utf-8"))
print(h.hexdigest())