6.12 random 模塊 6.121 生成隨機驗證碼 6.13 shutil 模塊 6.14 shelve模塊 shelve模塊比pickle模塊簡單,只有一個open函數,返回類似字典的對象,可讀可寫 ;key必須為字元串,而值可以是python所支持的數據類型 6.15 xml模塊 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所支持的數據類型
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,至今很多傳統公司如金融行業的很多系統的介面還主要是xml
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>
查 : 三種查找節點的方式
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'}]
改:
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')