xml模块
新建a.xml内容为:
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year updated="yes" version="1.0">2009</year>
<gdppc>141100</gdppc>
<neighbor direction="E" name="Austria" />
<neighbor direction="W" name="Switzerland" />
<egon age="18">hello</egon><egon age="18">hello</egon></country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year updated="yes" version="1.0">2012</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
<egon age="18">hello</egon><egon age="18">hello</egon></country>
<country name="Panama">
<year updated="yes" version="1.0">2012</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica" />
<neighbor direction="E" name="Colombia" />
<egon age="18">hello</egon><egon age="18">hello</egon></country>
</data>
1 import xml.etree.ElementTree as ET
2 tree = ET.parse('a.xml')#初始化
3 root = tree.getroot()#获取根节点
4 for child in root:
5 print('====>',child)
6 for i in child:#子节点
7 print(i.tag,i.attrib,i.text)#tag标签 attrib属性 text内容
8
9
10 # 查找element元素的三种方式
11 years = root.iter('year')#扫描整个xml文档树(迭代器)
12 for i in years:
13 print(i)
14
15 print(root.find('country'))#在root的子节点找,只找一个
16 print(root.findall('country'))#在root的子节点找,找所有
17
18 #修改
19 years = root.iter('year')#扫描整个xml文档树(迭代器)
20 for year in years:
21 year.text = str(int(year.text)+1)
22 year.set('updated','yes')#设置属性
23 year.set('version','1.0')#设置属性
24 tree.write('a.xml')
25
26 #删除
27 for county in root.iter('country'):
28 rank = county.find('rank')
29 if int(rank.text) >10:
30 county.remove(rank)
31 tree.write('a.xml')
32
33
34 #增加
35 for county in root.iter('country'):
36 e = ET.Element('egon')
37 e.text = 'hello'
38 e.attrib = {'age':'18'}#不能为int
39 county.append(e)
40 tree.write('a.xml')
configparser模块
新建a.cfg内容为:
[section1]
k1 = v1
k2:v2
user=egon
age=18
is_admin=true
salary=31
[section2]
k1 = v1
import configparser
config=configparser.ConfigParser()
config.read('a.cfg')
#查看所有的标题
res=config.sections() #['section1', 'section2']
print(res)
#查看标题section1下所有key=value的key
options=config.options('section1')
print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']
#查看标题section1下所有key=value的(key,value)格式
item_list=config.items('section1')
print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]
#查看标题section1下user的值=>字符串格式
val=config.get('section1','user')
print(val) #egon
#查看标题section1下age的值=>整数格式
val1=config.getint('section1','age')
print(val1) #18
#查看标题section1下is_admin的值=>布尔值格式
val2=config.getboolean('section1','is_admin')
print(val2) #True
#查看标题section1下salary的值=>浮点型格式
val3=config.getfloat('section1','salary')
print(val3) #31.0
hashlib模块
利用hashlib模块进行加密
import hashlib
m=hashlib.md5()
m.update('hello'.encode('utf-8'))
m.update('world'.encode('utf-8'))#多次update会将字符串内容拼接到一起,进行md5加密
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())
# 对文件内容进行hash
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())
# 加盐:通过md5的特性,在创建m对象时自定义添加一串字符增加加密难度防止被撞库
password='alex3714'
m=hashlib.md5('yihangbailushangqingtian'.encode('utf-8'))
m.update(password.encode('utf-8'))
passwd_md5=m.hexdigest()
print(passwd_md5)
subprocess模块
#subprocess会开启一个子进程来执行命令,不影响整个程序的运行
#语法:
subprocess.Popen('commond',shell=True,stdout=subprocess.PIPE,stderr = subprocess.PIPE)
#shell = true,命令为shell命令,stdout=subprocess.PIPE将正确的结果丢给管道保存stderr=subprocess.PIPE将报错放到管道中
print(res.stdout.read())#从管道读取内容