python_day06 常用模塊xml/configparser/hashlib/subprocess 面向對象程序設計
阿新 • • 發佈:2017-08-14
加密文件 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="xml數據(a.xml)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>
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 = Truea.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(r‘deeddddir 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(r‘dir E:\獲取的資料\老男孩教育-Python自動化課程-20170701\day07\day7純代碼\xml模塊‘, shell=True, stdout=subprocess.PIPE,) stdin=res1.stdout #輸出作為下一次的輸入 res2=subprocess.Popen(r‘findstr xml$‘, shell=True, stdin=res1.stdout, stdout=subprocess.PIPE,) print(res2.stdout.read().decode(‘gbk‘))
面向對象的程序設計
python_day06 常用模塊xml/configparser/hashlib/subprocess 面向對象程序設計