python 之 random 模塊、 shutil 模塊、shelve模塊、 xml模塊

6.12 random 模塊

print(random.random()) (0,1)----float 大於0且小於1之間的小數
print(random.randint(1,3)) [1,3] 大於等於1且小於等於3之間的整數
print(random.randrange(1,3)) [1,3) 大於等於1且小於3之間的整數
print(random.choice ( [1,'23', [4,5] ] ) )   1或者23或者[4,5]
print(random.sample( [1,'23', [ 4,5 ] ] , 2 ) ) 第二個參數是任意幾個元素組合 列表元素任意2個組合
print(random.uniform(1,3)) (1,3) 大於1小於3的小數,如1.927109612082716
import random
item=[1,3,5,7,9]
random.shuffle(item) # 打亂item的順序,至關於"洗牌"
print(item)

6.121 生成隨機驗證碼

import random
def make_code(n=5):
    res=''
    for i in range(n):
        s1=str(random.randint(0,9))
        s2=chr(random.randint(65,90))
        res+=random.choice([s1,s2])
    return res
​
print(make_code(10))

6.13 shutil 模塊

import shutil
import time
ret = shutil.make_archive(                          # 壓縮
    "day15_bak_%s" %time.strftime('%Y-%m-%d'),
    'gztar',
    root_dir=r'D:\code\SH_fullstack_s1\day15'
)
​
import tarfile                                      # 解壓
t=tarfile.open('day15_bak_2018-04-08.tar.gz','r')
t.extractall(r'D:\code\SH_fullstack_s1\day16\解包目錄')
t.close()

6.14 shelve模塊

shelve模塊比pickle模塊簡單,只有一個open函數,返回相似字典的對象,可讀可寫 ;key必須爲字符串,而值能夠是python所支持的數據類型python

import shelve
info1={'age':18,'height':180,'weight':80}
info2={'age':73,'height':150,'weight':80}
​
d=shelve.open('db.shv')     #
d['egon']=info1
d['alex']=info2
d.close()
​
​
d=shelve.open('db.shv')     #
print(d['egon'])        #{'age': 18, 'height': 180, 'weight': 80}
print(d['alex'])        #{'age': 73, 'height': 150, 'weight': 80}
d.close()
​
​
d=shelve.open('db.shv',writeback=True)  #
d['alex']['age']=10000
print(d['alex'])        #{'age': 10000, 'height': 150, 'weight': 80}
d.close()

6.15 xml模塊

xml是實現不一樣語言或程序之間進行數據交換的協議,跟json差很少,但json使用起來更簡單,在json還沒誕生的黑暗年代,只能選擇用xml,至今不少傳統公司如金融行業的不少系統的接口還主要是xmljson

6.151 xml模塊舉例:

<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year updated="yes">2018</year>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year updated="yes">2021</year>
        <neighbor direction="N" name="Malaysia" />
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year updated="yes">2021</year>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
    </country>
</data>

查 : 三種查找節點的方式app

import xml.etree.ElementTree as ET
tree=ET.parse('a.xml')
root=tree.getroot()
​
res=root.iter('rank')       # 會在整個樹中進行查找,並且是查找到全部
for item in res:           
    print(item)             # <Element     'rank' at 0x000002C3C109A9F8>.....
    print(item.tag)         # 標籤名       rank  rank  rank
    print(item.attrib)      # 屬性        {'updated': 'yes'}  {'updated': 'yes'}... 
    print(item.text)        # 文本內容     2  5  69
​
res=root.find('country')    # 只能在當前元素的下一級開始查找。而且只找到一個就結束
print(res.tag)
print(res.attrib)
print(res.text)
nh=res.find('neighbor')      # 在res的下一級查找
print(nh.tag)
print(nh.attrib)
​
cy=root.findall('country')   # 只能在當前元素的下一級開始查找, 可是查找到全部
print([item.attrib for item in cy]) #[{'name':'Liechtenstein'},{'name':'Singapore'},{'name':'Panama'}]

改:dom

import xml.etree.ElementTree as ET
tree=ET.parse('a.xml')
root=tree.getroot()
​
res=root.iter('year') 
for item in res:
    item.text=str(int(item.text) + 10)
    item.attrib={'updated':'yes'}
​
tree.write('a.xml')                     #把更改寫入
tree.write('c.xml')                     #新建一個.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) > 2020:
        ele=ET.Element('egon')
        ele.attrib={'nb':'yes'}
        ele.text='很是帥'
        country.append(ele)
        country.remove(year)
        
tree.write('b.xml')
相關文章
相關標籤/搜索