1. 程式人生 > >python_day06 常用模塊xml/configparser/hashlib/subprocess 面向對象程序設計

python_day06 常用模塊xml/configparser/hashlib/subprocess 面向對象程序設計

加密文件 closed lin nbsp class 視頻錄制 打印 logs alex

常用模塊
shutil
xml
configparser
hashlib
suprocess
面向對象的程序設計

常用模塊

xml模塊

技術分享
 1 <?xml version="1.0"?>
 2 <data>
 3     <country name="Liechtenstein">
 4         <rank updated="yes">2</rank>
 5         <year>2008</year>
 6         <gdppc>141100</gdppc>
 7         <neighbor name="
Austria" direction="E"/> 8 <neighbor name="Switzerland" direction="W"/> 9 </country> 10 <country name="Singapore"> 11 <rank updated="yes">5</rank> 12 <year>2011</year> 13 <gdppc>59900</gdppc> 14 <neighbor name="
Malaysia" direction="N"/> 15 </country> 16 <country name="Panama"> 17 <rank updated="yes">69</rank> 18 <year>2011</year> 19 <gdppc>13600</gdppc> 20 <neighbor name="Costa Rica" direction="W"/> 21 <neighbor name="
Colombia" direction="E"/> 22 </country> 23 </data>
xml數據(a.xml)
import xml.etree.ElementTree as ET
tree=ET.parse(a.xml)
root=tree.getroot()
for child in root:
    print(====>,child.tag)
    for i in child:
        print(i.tag,i.attrib,i.text)
關註:標簽名、屬性、文本內容

#查找element元素的三種方式
years=root.iter(year) #掃描整個xml文檔樹,找到所有
for i in years:
    print(i)

res1=root.find(country) #誰來調,就從誰下一層開始找,只找一個
print(res1)
res2=root.findall(country) #誰來調,就從誰下一層開始找,只找一個
print(res2)

#修改子節點
years=root.iter(year) #掃描整個xml文檔樹,找到所有
for year in years:
    year.text=str(int(year.text)+1)
    year.set(updated,yes)
    year.set(version,1.0)
tree.write(a.xml)

#刪除
for county in root.iter(country):
    # print(county.tag)
    rank=county.find(rank)
    if int(rank.text) > 10:
        county.remove(rank)
tree.write(a.xml)

#增加節點
for county in root.iter(country):
    e=ET.Element(egon)
    e.text=hello
    e.attrib={age:18}
    county.append(e)

#前面增刪改操作一定要寫入到a.xml才會生效
xmltree.write(a.xml)

configparser

技術分享
[egon]
name = egon
is_admin = False
salary = 3.1

[alex]
name = alex
is_admin = True
a.ini
import configparser
config=configparser.ConfigParser()
config.read(a.ini)
#取配置
print(config.sections()) #看標題
print(config.options(config.sections()[0])) #查看某個標題下的配置項
res=config.get(alex,name)#查看某個標題下的某個配置項的值
print(type(res))
# getint/getfloat/getboolean
res1=config.getfloat(egon,salary)#查看某個標題下的某個配置項的值
print(type(res1))
res1=config.getboolean(egon,is_admin)#查看某個標題下的某個配置項的值
print(type(res1))
#修改
config.remove_section(alex)
config.remove_option(egon,age)
#添加
config.add_section(alex)
config.set(alex,name,SB)
#寫入文件
config.write(open(a.ini,w))

hashlib

三個特點:
1.內容相同則hash運算結果相同,內容稍微改變則hash值則變
2.不可逆推
3.相同算法:無論校驗多長的數據,得到的哈希值長度固定。

import hashlib
#如下幾種加密方式結果一樣
m=hashlib.md5()
m.update(hello.encode(utf-8))
m.update(world.encode(utf-8))
print(m.hexdigest())

m=hashlib.md5()
m.update(helloworld.encode(utf-8))
print(m.hexdigest())

m=hashlib.md5(helloworld.encode(utf-8))
print(m.hexdigest())

m=hashlib.md5(h.encode(utf-8))
m.update(elloworld.encode(utf-8))
print(m.hexdigest())

#加密文件
m=hashlib.md5()
with open(a.xml,rb) as f:
    for line in f:
        m.update(line)
print(m.hexdigest())
#耗費內存不推薦使用
m=hashlib.md5()
with open(a.xml,rb) as f:
    m.update(f.read())
print(m.hexdigest())

#加鹽
password=alex3714
m=hashlib.md5(yihangbailushangqingtian.encode(utf-8))
m.update(password.encode(utf-8))
passwd_md5=m.hexdigest()
print(passwd_md5)

#hmac模塊
#默認第一次加密就會加鹽
import hmac
h=hmac.new(hello.encode(utf-8))
h.update(world.encode(utf-8))
print(h.hexdigest())
#0e2564b7e100f034341ea477c23f283b
h=hmac.new(hel.encode(utf-8))
h.update(loworld.encode(utf-8))
print(h.hexdigest())
#2b8861887b9670e3b042475182619b5d
h=hmac.new(hello.encode(utf-8))
h.update(w.encode(utf-8))
h.update(or.encode(utf-8))
h.update(ld.encode(utf-8))
print(h.hexdigest())
#0e2564b7e100f034341ea477c23f283b

suprocess

import subprocess
res=subprocess.Popen(rdeeddddir D:\04-視頻錄制存放目錄\python18期\day7\xml模塊,
                     shell=True,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.PIPE)
print(=================>) #程序會先打印此處
print(=================>,res)
print(-========>,res.stdout.read())
print(-========>,res.stderr.read().decode(gbk))     #windows為gbk解碼,Linux為ut-8解碼
print(-========>,res.stderr.read().decode(gbk))     #管道信息只獲取一次,之後再獲取就沒有了
#dir file_path | findstr xml$
res1=subprocess.Popen(rdir E:\獲取的資料\老男孩教育-Python自動化課程-20170701\day07\day7純代碼\xml模塊,
                     shell=True,
                     stdout=subprocess.PIPE,)
stdin=res1.stdout    #輸出作為下一次的輸入
res2=subprocess.Popen(rfindstr xml$,
                     shell=True,
                     stdin=res1.stdout,
                     stdout=subprocess.PIPE,)
print(res2.stdout.read().decode(gbk))

面向對象的程序設計

python_day06 常用模塊xml/configparser/hashlib/subprocess 面向對象程序設計