模块补充
- 模块补充
- hashlib
- 介绍
- 使用
- md5
- sha1
- sha256
- sha384
- sha512
- configparser
- 介绍
- 使用
- 获取所有的节点
- 获取指定节点下所有的键值对
- 获取指定节点下所有的建
- 获取指定节点下指定key的值
- 添加节点
- 检查节点
- 删除节点
- 删除节点内某一个键的值
- 检查某一个节点中有没有这个键
- 设置指定节点中指定键的值
- XML
- 介绍
- 使用方法
- 解析XML的两种方法
- 操作XML文件
- hashlib
模块补充
-
hashlib
-
介绍
- 本模块用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
-
使用
-
md5
import hashlibhash = hashlib.md5()hash.update(bytes(‘Qi‘, encoding=‘utf-8‘))print(hash.hexdigest())
-
sha1
import hashlibhash = hashlib.sha1()hash.update(bytes(‘Wu‘,encoding=‘utf-8‘))print(hash.hexdigest())
-
sha256
import hashlibhash = hashlib.sha256()ash.update(bytes(‘Wu‘, encoding=‘utf-8‘))print(hash.hexdigest())
-
sha384
import hashlibhash = hashlib.sha384()ash.update(bytes(‘Wu‘, encoding=‘utf-8‘))print(hash.hexdigest())
-
sha512
import hashlibhash = hashlib.sha512()ash.update(bytes(‘Wu‘, encoding=‘utf-8‘))print(hash.hexdigest())
-
- ps:以上的价目算法虽然很厉害,但是存在缺陷,可以通过装库来反解,所以在有必要的时候对加密算法中添加自定义key后再来做加密
- MD5
import hashlibhash = hashlib.md5(bytes(‘89fds‘,encoding="utf-8"))hash.update(bytes(‘Wu‘,encoding="utf-8"))print(hash.hexdigest())
- MD5
- python还有一个内置的hmac模块,他内部对我们创建的key和内容进行额外的处理然后加密
import hmach = hamc.new(bytes(‘sasss‘,encoding=‘utf-8))h.update(bytes(‘Qi‘,encoding=‘utf-8‘))print(h.hexdigest())
-
-
configparser
-
介绍
- 用来处理特定格式的文件,本质上是利用open来操作文件
-
使用
-
获取所有的节点
import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)#参数一:要打开文件的路径。参数二:指定打开文件时使用什么编码ret = config.sections()#获取所有的节点,用列表返回print(ret)
-
获取指定节点下所有的键值对
import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)ret = config.items(‘k1‘)print(ret)
-
获取指定节点下所有的建
import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)ret = config.options(‘W‘)print(ret)
-
获取指定节点下指定key的值
import configparserconfig = 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 configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)config.add_section("WU")#添加一个WU节点config.write(open(‘test‘, ‘w‘))#将内存中修改后的内容写入到文件中
-
检查节点
import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)has_sec = config.has_section(‘W3‘)#检查节点W3是否存在存在返回True否则Falseprint(has_sec)
-
删除节点
import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)config.remove_section("WU")#删除WU节点config.write(open(‘test‘, ‘w‘))
-
删除节点内某一个键的值
import configparserconfig = configparser.ConfigParser()config.read(‘test‘,encoding=‘utf-8‘)config.remove_option(‘W1‘,‘name‘)#在内存中删除W1节点下的name键值对config.write(open(‘test‘,‘w‘))#将内存中的内容写入文件
-
检查某一个节点中有没有这个键
import configparserconfig = configparser.ConfigParser()config.read(‘test‘,encoding=‘utf-8‘)print(config.has_option(‘W1‘,‘name‘))
-
设置指定节点中指定键的值
import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)config.set(‘W1‘,‘name‘,‘WuYongQi‘)#将W1节点下的键为name的值改成WuYongQiconfig.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 ETstr_xml = open(‘test.xml‘, ‘r‘).read()#打开文件,读取xml文件内容root = ET.XML(str_xml)#将字符串解析成xml特殊对象,root代指xml文件的根节点
- 使用ElementTree.parse
from xml.etree import ElementTree as ETtree = ET.parse("xo.xml")#直接解析xml文件root = tree.getroot()#获取xml文件的根节点
- 使用 ElementTree.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 ETtree = 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 ETstr_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 ETtree = 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 ETroot = ET.Element("hello")# 创建根节点 # 在根节点下创建第一个节点为son1,并且创建属性name值为hello a1 = ET.Element(‘son‘, {‘name‘: ‘hello‘}) # 在根节点下创建第二个节点为son2,并且创建属性name值为word s1 = ET.Element(‘son2‘, {"name": ‘word‘})root.append(a1) #向跟节点下创建son1root.append(s1) #向根节点下创建son2 # 在根节点下的第一个节点中继续创建节点,属性name值为Wu a2 = ET.Element(‘aaaaaa2‘, {‘name‘: ‘Wu‘}) # 在根节点下的第一个节点中继续创建节点,属性name值为Qi a3 = ET.Element(‘aaaaaa3‘, {‘name‘: ‘Qi‘})a1.append(a2) #向son节点下创建aaaaaa2a1.append(a3) #向son节点下创建aaaaaa3tree = 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) #向跟节点下创建son1root.append(s1) #向根节点下创建son2 # 在根节点下的第一个节点中继续创建节点age,属性name值为Wu a2 = ET.SubElement(a1, "age", attrib={‘name‘: ‘Wu‘})a2.text = ‘hello‘ #向节点No中添加text内容为helloa1.append(a2) #向son节点下创建agetree = 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 ETfrom xml.dom import minidomdef 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) #向跟节点下创建son1root.append(s1) #向根节点下创建son2 # 在根节点下的第一个节点中继续创建节点,属性name值为Wu a2 = ET.SubElement(a1, "age", attrib={‘name‘: ‘儿11‘})a2.text = ‘孙子‘a1.append(a2) #向son节点下创建aaaaaa2aaa = prettify(root)#执行这个函数并把节点传进去f = open("test4.xml",‘w‘,encoding=‘utf-8‘)#使用open方法写入并保存退出f.write(aaa)f.close()
- 命名空间
- ##requests
- ##logging
- ##执行系统命令
- ##shutil
- Element类的方法
-
-
时间: 2024-10-06 17:20:03