Python开发Day06
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python开发Day06相关的知识,希望对你有一定的参考价值。
模块补充
模块补充
-
hashlib
-
介绍
- 本模块用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
-
使用
-
md5
import hashlib
hash = hashlib.md5()
hash.update(bytes(‘Qi‘, encoding=‘utf-8‘))
print(hash.hexdigest()) -
sha1
import hashlib
hash = hashlib.sha1()
hash.update(bytes(‘Wu‘,encoding=‘utf-8‘))
print(hash.hexdigest()) -
sha256
import hashlib
hash = hashlib.sha256()
ash.update(bytes(‘Wu‘, encoding=‘utf-8‘))
print(hash.hexdigest()) -
sha384
import hashlib
hash = hashlib.sha384()
ash.update(bytes(‘Wu‘, encoding=‘utf-8‘))
print(hash.hexdigest()) -
sha512
import hashlib
hash = hashlib.sha512()
ash.update(bytes(‘Wu‘, encoding=‘utf-8‘))
print(hash.hexdigest())
-
-
ps:以上的价目算法虽然很厉害,但是存在缺陷,可以通过装库来反解,所以在有必要的时候对加密算法中添加自定义key后再来做加密
- MD5
import hashlib
hash = hashlib.md5(bytes(‘89fds‘,encoding="utf-8"))
hash.update(bytes(‘Wu‘,encoding="utf-8"))
print(hash.hexdigest())
- MD5
- python还有一个内置的hmac模块,他内部对我们创建的key和内容进行额外的处理然后加密
import hmac
h = hamc.new(bytes(‘sasss‘,encoding=‘utf-8))
h.update(bytes(‘Qi‘,encoding=‘utf-8‘))
print(h.hexdigest())
-
-
configparser
-
介绍
- 用来处理特定格式的文件,本质上是利用open来操作文件
-
使用
-
获取所有的节点
import configparser
config = configparser.ConfigParser()
config.read(‘test‘, encoding=‘utf-8‘)#参数一:要打开文件的路径。参数二:指定打开文件时使用什么编码
ret = config.sections()#获取所有的节点,用列表返回
print(ret) -
获取指定节点下所有的键值对
import configparser
config = configparser.ConfigParser()
config.read(‘test‘, encoding=‘utf-8‘)
ret = config.items(‘k1‘)
print(ret) -
获取指定节点下所有的建
import configparser
config = configparser.ConfigParser()
config.read(‘test‘, encoding=‘utf-8‘)
ret = config.options(‘W‘)
print(ret) -
获取指定节点下指定key的值
import configparser
config = configparser.ConfigParser()
config.read(‘test‘, encoding=‘utf-8‘)
ret = config.get(‘w‘,‘k1‘)#获取w节点下的k1的值
ret2 = config.getint(‘section1‘, ‘k1‘)#获取w节点下的k1的值,并转成整型
ret3 = config.getfloat(‘section1‘, ‘k1‘)#获取w节点下的k1的值,并转成浮点型
ret4 = config.getboolean(‘section1‘, ‘k1‘)#获取w节点下的k1的值,并转成bool型
print(ret) -
添加节点
import configparser
config = configparser.ConfigParser()
config.read(‘test‘, encoding=‘utf-8‘)
config.add_section("WU")#添加一个WU节点
config.write(open(‘test‘, ‘w‘))#将内存中修改后的内容写入到文件中 -
检查节点
import configparser
config = configparser.ConfigParser()
config.read(‘test‘, encoding=‘utf-8‘)
has_sec = config.has_section(‘W3‘)#检查节点W3是否存在存在返回True否则False
print(has_sec) -
删除节点
import configparser
config = configparser.ConfigParser()
config.read(‘test‘, encoding=‘utf-8‘)
config.remove_section("WU")#删除WU节点
config.write(open(‘test‘, ‘w‘)) -
删除节点内某一个键的值
import configparser
config = configparser.ConfigParser()
config.read(‘test‘,encoding=‘utf-8‘)
config.remove_option(‘W1‘,‘name‘)#在内存中删除W1节点下的name键值对
config.write(open(‘test‘,‘w‘))#将内存中的内容写入文件 -
检查某一个节点中有没有这个键
import configparser
config = configparser.ConfigParser()
config.read(‘test‘,encoding=‘utf-8‘)
print(config.has_option(‘W1‘,‘name‘)) -
设置指定节点中指定键的值
import configparser
config = configparser.ConfigParser()
config.read(‘test‘, encoding=‘utf-8‘)
config.set(‘W1‘,‘name‘,‘WuYongQi‘)#将W1节点下的键为name的值改成WuYongQi
config.write(open(‘test‘,‘w‘))#将内存中的内容写入的磁盘
-
-
-
XML
-
介绍
- XML是实现不同语言或程序之间进行数据交换的协议,具体格式如下
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year>2023</year>
<gdppc>141100</gdppc>
<neighbor direction="E" name="Austria" />
<neighbor direction="W" name="Switzerland" />
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year>2026</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year>2026</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica" />
<neighbor direction="E" name="Colombia" />
</country>
</data>
- XML是实现不同语言或程序之间进行数据交换的协议,具体格式如下
-
使用方法
-
解析XML的两种方法
-
使用 ElementTree.XML
from xml.etree import ElementTree as ET
str_xml = open(‘test.xml‘, ‘r‘).read()#打开文件,读取xml文件内容
root = ET.XML(str_xml)#将字符串解析成xml特殊对象,root代指xml文件的根节点 -
使用ElementTree.parse
from xml.etree import ElementTree as ET
tree = ET.parse("xo.xml")#直接解析xml文件
root = tree.getroot()#获取xml文件的根节点
-
-
操作XML文件
-
Element类的方法
- tag 当前节点标签名
- attrib 当前节点属性
- text 当前节点的内容
- makeelement(tag,attrib) 创建一个新的节点
- append(self, subelement) 在当前节点追加一个子元素
- extend(self, elements) 为当前节点扩展 n 个子节点,elements是一个序列
- insert(self, index, subelement) 在当前节点创建子节点,然后插入指定位置
- remove(self, subelement) 删除指定的节点subelement
- find(self, path, namespaces=None) 获取第一个寻找到的子节点
- findtext(self,path,default=None,namespaces=None)获取第一个寻找到的子节点内容
- findall(self, path, namespaces=None) 获取所有的子节点
- iterfind(self, path, namespaces=None) 获取所有指定的节点,并创建一个迭代器(可以被for循环)
- clear(self) 清空节点
- get(self, key, default=None) 获取当前节点的属性值
- set(self, key, value) 为当前节点设置属性值
- keys(self) 获取当前节点所有属性的key
- items(self) 获取当前节点所有的属性值,每一个属性都是一对键值对
- iter(self, tag=None) 在当前节点的子孙中根据节点名称寻找所有指定的节点,并返回一个迭代器(可以被for循环)。
- itertext(self) 在当前节点下所有的节点中根据节点名称寻找所有指定的节点的内容,并返回一个迭代器(可以被for循环)。
-
浏览XML文档中所有内容
from xml.etree import ElementTree as ET #使用xml文件夹下的etree文件夹下的EementTree文件,并且自定义名称为ET
-------------- 打开方式一 --------------
str_xml = open(‘test.xml‘, ‘r‘).read()# 打开文件,读取XML文件内容
root = ET.XML(str_xml)#将字符串解析成xml特殊对象,root代指xml文件的根节点
-------------- 打开方式二 --------------
tree = ET.parse("xo.xml")#直接解析xml文件
root = tree.getroot()#获取xml文件的根节点
print(root.tag)# 查看root节点名称
for i in root:#查询XML文档的第二层
print(i.tag, i.attrib)查看第二层节点的标签名称和标签属性
for ii in i: #查询XML文档的第三层
print(ii.tag,ii.text) #查看第三层节点的标签名称和内容 -
浏览XML文档中指定的节点
from xml.etree import ElementTree as ET
tree = ET.parse("xo.xml")
root = tree.getroot()
print(root.tag)
for i in root.iter(‘year‘):# 查询XML中所有的year节点
print(i.tag, i.text)#输出节点的标签名称和内容 -
修改节点内容(方法一)
from xml.etree import ElementTree as ET
str_xml = open(‘xo.xml‘, ‘r‘).read()
root = ET.XML(str_xml)
for i in root.iter(‘year‘): #循环所有的year节点
new_year = int(i.text) + 10 #将year节点中的内容 增加十
i.text = str(new_year)
i.set(‘name‘, ‘Wu‘) #设置属性本次循环节点的属性name为Wu
i.set(‘age‘, ‘20‘) #设置属性本次循环节点的属性age为20
del i.attrib[‘name‘] #删除本次循环节点属性name
tree = ET.ElementTree(root) #使用ElementTree下的ElementTree方法
tree.write("test2.xml", encoding=‘utf-8‘)#写如文件test2.xml中,使用utf-8编码 -
修改节点内容(方法二)
from xml.etree import ElementTree as ET
tree = ET.parse("xo.xml")
root = tree.getroot()
for i in root.iter(‘year‘): #循环所有的year节点
new_year = int( i.text) + 10 # 将year节点中的内容增加十给变量new_year
i.text = str(new_year) #当前循环的节点内容修改为变量new_year
i.set(‘name‘, ‘WU‘) #设置本次循环节点属性name为WU
i.set(‘age‘, ‘25‘) #设置本次循环节点属性age为25
del i.attrib[‘age‘] # 删除本次循环节点属性age
tree.write("test3.xml", encoding=‘utf-8‘) #上面修改的是内存里的内容所以需要我们去写去到文件中,test3.xml为保存的文件名,写入时使用utf-8编码类型 -
创建XML文档(方法一)
from xml.etree import ElementTree as ET
root = ET.Element("hello")# 创建根节点
# 在根节点下创建第一个节点为son1,并且创建属性name值为hello
a1 = ET.Element(‘son‘, {‘name‘: ‘hello‘})
# 在根节点下创建第二个节点为son2,并且创建属性name值为word
s1 = ET.Element(‘son2‘, {"name": ‘word‘})
root.append(a1) #向跟节点下创建son1
root.append(s1) #向根节点下创建son2
# 在根节点下的第一个节点中继续创建节点,属性name值为Wu
a2 = ET.Element(‘aaaaaa2‘, {‘name‘: ‘Wu‘})
# 在根节点下的第一个节点中继续创建节点,属性name值为Qi
a3 = ET.Element(‘aaaaaa3‘, {‘name‘: ‘Qi‘})
a1.append(a2) #向son节点下创建aaaaaa2
a1.append(a3) #向son节点下创建aaaaaa3
tree = ET.ElementTree(root)
tree.write(‘test4.xml‘,encoding=‘utf-8‘, short_empty_elements=True)#将内容写入文件test4.xml中使用utf-8编码,如果节点中没有text内容那么就自闭合 -
创建XML文档(方法二)
from xml.etree import ElementTree as ET
# 创建根节点
root = ET.Element("famliy")
# 在根节点下创建第一个节点为son1,并且创建属性name值为hello
a1 = ET.Element(‘son‘, {‘name‘: ‘hello‘})
# 在根节点下创建第二个节点为son2,并且创建属性name值为word
s1 = ET.Element(‘son2‘, {"name": ‘word‘})
root.append(a1) #向跟节点下创建son1
root.append(s1) #向根节点下创建son2
# 在根节点下的第一个节点中继续创建节点age,属性name值为Wu
a2 = ET.SubElement(a1, "age", attrib={‘name‘: ‘Wu‘})
a2.text = ‘hello‘ #向节点No中添加text内容为hello
a1.append(a2) #向son节点下创建age
tree = ET.ElementTree(root)
tree.write(‘test4.xml‘,encoding=‘utf-8‘,xml_declaration=True,short_empty_elements=True)#将内容写入文件test4.xml中使用utf-8编码,如果节点中没有text内容那么久自闭合,并且声明xml -
如果创建的xml需要自动换行看上去更美观一些使用xml下的dom下的minidom模块
from xml.etree import ElementTree as ET
from xml.dom import minidom
def prettify(elem): #创建函数来处理内容,将节点转换成字符串,并添加缩进
a = ET.tostring(elem, ‘utf-8‘)
b = minidom.parseString(a)
return b.toprettyxml(indent="\t")
# 创建根节点
root = ET.Element("famliy")
# 在根节点下创建第一个节点为son1,并且创建属性name值为hello
a1 = ET.Element(‘son‘, {‘name‘: ‘hello‘})
# 在根节点下创建第二个节点为son2,并且创建属性name值为word
s1 = ET.Element(‘son2‘, {"name": ‘word‘})
root.append(a1) #向跟节点下创建son1
root.append(s1) #向根节点下创建son2
# 在根节点下的第一个节点中继续创建节点,属性name值为Wu
a2 = ET.SubElement(a1, "age", attrib={‘name‘: ‘儿11‘})
a2.text = ‘孙子‘
a1.append(a2) #向son节点下创建aaaaaa2
aaa = prettify(root)#执行这个函数并把节点传进去
f = open("test4.xml",‘w‘,encoding=‘utf-8‘)#使用open方法写入并保存退出
f.write(aaa)
f.close() -
命名空间
- ##requests
- ##logging
- ##执行系统命令
- ##shutil
-
-
-
以上是关于Python开发Day06的主要内容,如果未能解决你的问题,请参考以下文章
2018-06-27-Python全栈开发day23-loggingconfigparserhashlib模块
Python自动化开发课堂笔记Day06 - Python基础(模块)
Python自动化开发课堂笔记Day06 - Python进阶(类)