码迷,mamicode.com
首页 > 其他好文 > 详细

常用模块(三)——shelve、xml、hashlib、configparser

时间:2018-08-13 19:42:44      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:数据库   理解   parse   包括   内部使用   roo   表示   序列化   从服务器   

常用模块(三)

一、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"))
配置文件

 

常用模块(三)——shelve、xml、hashlib、configparser

标签:数据库   理解   parse   包括   内部使用   roo   表示   序列化   从服务器   

原文地址:https://www.cnblogs.com/linagcheng/p/9469692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!