文章目录
一、【Python】识别.yaml/.ini/.xml文件:
背景:在平时编码中很多情况下都会讲固定配置信息存储在文件中,例如:.yaml/.ini/.xml文件,本篇就介绍如何解析各个形式的文件
1.1、模块的安装:
pip install PyYAML 我这里安装的是5.4.1版本
1.2、.yaml文件读取:
import yaml from settings import * # 读取.yaml文件方法, # 1)在/config/settings.py文件中配置yaml文件路径; # 2)在/config/ReadYaml.py文件中配置读取方法; def read_config_yaml(): # 读取config.yaml文件方法 path = CONFIG_YAML_PATH with open(path, encoding='utf-8') as file: data = yaml.safe_load(file) return data
1.3、yaml文件写入:
def write_cookie_yaml(conf): content = conf path = COOKIE_YAML_PATH with open(path, 'w', encoding='utf-8') as file: yaml.dump(content, file, default_flow_style=False, encoding='utf-8', allow_unicode=True)
1.4、yaml文件更新操作:
# coding:utf-8 from ruamel import yaml # pip install ruamel.yaml==0.16.12 def up_yml_vendor(name, cookie): # 提取vendor端cookie并存储对应路径下 with open(COOKIE_YAML_PATH, encoding="utf-8") as f: content = yaml.load(f, Loader=yaml.RoundTripLoader) # 修改yml文件中的参数 content['test']['yinni']['vendor'][f'{
name}']['Cookie'] = f"{
cookie}" with open(COOKIE_YAML_PATH, 'w', encoding="utf-8") as nf: yaml.dump(content, nf, Dumper=yaml.RoundTripDumper)
1.5、.ini文件解析:
1.5.1、连接指定.ini文件:
import configparser from Akulaku_project8_Request.config.settings import * class operate_ini(object): def __init__(self, Path: str): self.conf = configparser.ConfigParser() self.path = DATE_PATH + Path self.conf.readfp(open(self.path, encoding='utf-8')) self.items = [] self.values = []
1.5.2、读取.ini文件方法:
def read_ini1(self, section: str, item: str): # 第一种读取ini文件方式,通过read方法,读取指定section下的单个item值 value = self.conf[f'{
section}'][f'{
item}'] # print('第一种方法读取到的值:', value) return value def read_ini2(self, section: str, item: str): # 第二种读取ini文件方式,通过get方法 value = self.conf.get(f'{
section}', f'{
item}') # print('第二种方法读取到的值:', value) return value def read_ini3(self, section: str): # 第三种读取ini文件方式,读取到一个section中的所有数据,返回一个列表 value = self.conf.items(f'{
section}') # print('第三种方法读取到的值:', value) # 第三种方法读取到的值: [('name', 'demaxiya'), ('sex', 'man'), ('nation', 'Han')] return value
1.5.3、获取所有section方法:
def query_sections(self): # 获取所有的sections,已列表形式返回 section = self.conf.sections() return section
1.5.4、根据执行section获取items及values列表:
def get_item_values(self, section: str): # 输入一个section值获取items,values按照对应关系返回列表 data = self.conf.items(f'{
section}') items = self.items values = self.values for i in data: items.append(i[0]) values.append(i[1]) return [items, values]
1.5.5、.ini文件新增处理:
def add_section(self, section: str): # 添加单个section section_list = operate_ini().query_sections() try: if section not in section_list: self.conf.add_section(f'{
section}') self.conf.write(open(self.path, 'w', encoding='utf-8')) except Exception as e: print(f"发生错误,错误原因为:{
e}") def add_option(self, section: str, item: str, value: str): operate_ini().add_section(section=section) self.conf.set(f"{
section}", f"{
item}", f"{
value}") self.conf.write(open(self.path, 'r+', encoding='utf-8'))
1.6、.xml文件解析
1.6.1、连接.xml文件
import xml.etree.ElementTree as ET # 导入模块,名字太长了,把这个模块名重命名为ET from settings import * class operate_xml(object): def __init__(self, Path: str): self.path = DATE_PATH + Path self.tree = ET.parse(self.path) # parse解析,用ET模块下的parse这个方法把xml文件解析开,解析开拿到一个tree,tree就是一个对象 self.root = self.tree.getroot() self.list = [] # 这个对象可以调用方法,getroot就是根的意思 # self.domTree = parse(self.path)
1.6.2、.xml文件单个查询
def get_root(self): # 获取根素名称 root = self.root print([root[0]]) # root这个对象有一个属性tag,tag的值就是根标签的名字 def get_first_tree(self): # 获取DOM树根目录下首层标签名称 for n in self.root: list = self.list list.append(n.tag) print(list) # 获取DOM树根目录下首层标签名称,将结果以列表形式返回 def get_inner_tree(self): # 获取DOM树根目录下内层素名称 for n in self.root: for i in n: list = self.list list.append(i.tag) print(list) # 获取DOM树根目录下内层素名称,将结果以列表形式返回 def get_first_attrib(self): # 获取DOM树根目录下首层标签属性值 for n in self.root: list = self.list list.append(n.attrib) print(list) # 获取DOM树根目录下首层标签属性值,结果以列表形式返回
1.6.3、获取里层标签属性&标签文本
def get_inner_text(self): # 获得里层标签文本值 for n in self.root: for i in n: list = self.list list.append(i.text) print(list) def get_text(self, id: str): # 根据一级标签属性值,遍历标签文本值 for n in self.root: a = dict(n.attrib).values() if f'{
id}' == list(a)[0]: for i in n: rv = self.list rv.append(i.text) return rv
1.6.4、根据一级标签属性遍历标签文本
def get_tag_text(self, id: str, tag: str): # 根据一级标签属性值,遍历标签文本值 for n in self.root: a = dict(n.attrib).values() if f'{
id}' == list(a)[0]: for i in n: if i.tag == tag: rv = self.list rv.append(i.text) return rv
1.6.5、根据一级标签属性,添加标签文本
def add_text(self, id: str, attrib: str, text: str): # 根据一级标签属性值,添加标签文本值 for n in self.root: a = dict(n.attrib).values() if f'{
id}' == list(a)[0]: sex = ET.SubElement(n, f"{
attrib}") sex.text = f"{
text}" self.tree.write(TEST_XML_PATH, encoding='utf-8', xml_declaration=True, method='xml') # self.domTree.writexml(TEST_XML_PATH, addindent=' ', encoding='utf-8')
1.6.6、新建一个.xml文件:
def new_xml(self): # 新建一个xml文件 new_xml = ET.Element("namelist") # 创建了一个根节点 # 相当于创建了<namelist></namelist> name = ET.SubElement(new_xml, "name", attrib={
"enrolled": "yes"}) # 创建一个子标签name,然后增加一个属性 age = ET.SubElement(name, "age", attrib={
"checked": "no"}) sex = ET.SubElement(name, "sex") sex.text = "28" et = ET.ElementTree(new_xml) # 生成文档对象 et.write("dema.xml", encoding="utf8", xml_declaration=True)
今天的文章
【Python】识别.yaml/.ini/.xml文件分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/96209.html