1. 程式人生 > >常用模塊(三)——shelve、xml、hashlib、configparser

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

new .config 映射 法規 加密 生成xml oot 結束 一定的

常用模塊(三)

一、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