常用模块补充

补充内容: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())


 

 

posted @ 2018-08-13 15:43  &nbsp  阅读(142)  评论(0编辑  收藏  举报