Python读写xml(xml,lxml)Edge 浏览器插件 WebTab - 免费ChatGPT

news2024/10/3 8:24:16

Python读写xml(xml,lxml)Edge 浏览器插件 WebTab - 免费ChatGPT

  • XML
    • 一、xml文件创建
      • 方法一:使用xml.dom.minidom
        • 1、文件、标签的创建
      • 方法二:使用ElementTree
    • 二、xml文件修改
      • 1、修改标签内容,属性
      • 2、增加子标签
    • 四、xml操作之删除
      • 1、删除指定标签
      • 3、删除xml文件
  • LXML
    • 1、读取xml文档
      • 1)文档解析
      • 2)获取属性
      • 3)获取节点
      • 4)获取文本
    • 2、写入xml文档
      • 1)创建文档(节点)
      • 2)添加子节点
      • 3)添加文本
      • 4)保存文档
  • Edge 浏览器插件 WebTab - 免费ChatGPT
  • 视频逐帧保存图片

XML

一、xml文件创建

方法一:使用xml.dom.minidom

1、文件、标签的创建

import xml.etree.ElementTree as etree
from xml.dom.minidom import Document
from xml.etree.ElementTree import Element as El

# 创建xml文件
doc = Document()
# 创建根节点
root_node = doc.createElement("root")
doc.appendChild(root_node)
# 创建子节点
son_node = doc.createElement("son_node")
root_node.appendChild(son_node)
# 子节点添加内容
text = doc.createTextNode("标签内容")
son_node.appendChild(text)
# 设置节点属性
son_node.setAttribute("name", "value")
son_node.setAttribute("name1", "value1")
# 添加二级子节点
sec_node = doc.createElement("second")
son_node.appendChild(sec_node)
text = doc.createTextNode("二级子节点内容")
sec_node.appendChild(text)
# 将内容保存到xml文件中
filename = "test.xml"
f = open(filename, "w", encoding="utf-8")
f.write(doc.toprettyxml(indent="  "))
f.close()

输出

<?xml version="1.0" ?>
<root>
  <son_node name="value" name1="value1">
    标签内容
    <second>二级子节点内容</second>
  </son_node>
</root>

方法二:使用ElementTree

import xml.etree.ElementTree as etree

# 创建根元素
root = etree.Element("root")
# 创建子元素son,并设置子元素的标签名,属性
son = etree.SubElement(root, "max", attrib={"sex": "male"})
# 设置子元素son的内容
son.text = "content"
# 创建子元素的子元素sub_son
sub_son = etree.SubElement(son, "lily", attrib={"sex": "female"})
# 创建elementtree实例
et = etree.ElementTree(element=root)
et.write(r"test.xml", encoding="utf-8")

输出

<root><max sex="male">content<lily sex="female" /></max></root>

二、xml文件修改

1、修改标签内容,属性

# 修改标签的内容
tag.text = "modify_content"
# 修改标签的属性,或者添加属性
tag.set("atrri", "value3")
# 此操作将删除其他属性,只保留设置的属性
tag.attrib = {"atrri": "value"}

2、增加子标签

tag = root.find(".//name")  # 需加入.//
# name标签下增加sex和address标签
sex = etree.SubElement(tag, "sex", attrib={"hobby": "swim"})
sex.text = "male"
addr = etree.SubElement(tag, "address", attrib={"provience": "guangdong"})
addr.text = "shenzhen"
tree.write(xml_path)

四、xml操作之删除

1、删除指定标签

xml_path = r"test.xml"
tree = etree.parse(xml_path)  # 获取xml整个文档内容
for t in tree.iter():  # tree.iter()可获得xml的所有节点及信息
    if t.tag == "entry":  # 查找到父节点
        print(list(t))
        for i in list(t):
            if i.tag == "category":  # 查找到子节点
                t.remove(i)  # 通过父节点删除子节点
                break  # 如果要删除父节点下所有子节点为category的,则为continue
tree.write(xml_path)

3、删除xml文件

xml_path = r"test.xml"
os.remove(xml_path)

LXML

lxml解析xml的时候,自动处理各种编码问题。而且它天生支持 XPath 1.0、XSLT 1.0、定制元素类。

1、读取xml文档

1)文档解析

lxml可以解析xml的字符串,使用etree.fromstring方法,如下所示:

#coding:utf-8
from lxml import etree
 
xml_text = '<xml><head></head><body></body></xml>'
xml = etree.fromstring(xml_text)

lxml可以直接读取xml文件。

示例test.xml:

<?xml version="1.0" encoding="utf-8"?>
<root version="1.2" tag="test">
    <head>
        <title>test xml document</title>
    </head>
    <body>
        <items id="1">
            <source>aa</source>
            <target>AA</target>
        </items>
        <items id="2">
            <source>bb</source>
            <target>BB</target>
        </items>
        <items id="3">
            <source>cc</source>
            <target id="3t">CC<bpt id="3t1"/>cc</target>
        </items>
    </body>
</root>

lxml读取xml文件的代码如下所示:

#coding:utf-8
from lxml import etree
 
xml = etree.parse('test.xml') #读取test.xml文件

2)获取属性

根节点root中有两个属性,我们可以通过如下方法获取根节点和其属性:

#coding:utf-8
from lxml import etree
 
xml = etree.parse('test.xml') #读取test.xml文件
root = xml.getroot() #获取根节点
 
#获取属性
print(root.items()) #获取全部属性和属性值
print(root.keys())  #获取全部属性
print(root.get('version', '')) #获取具体某个属性

得到如下结果:

[('version', '1.0'), ('tag', 'test')]
['version', 'tag']
1.2

3)获取节点

假如我们不知道root节点下有什么节点,可以通过循环遍历。

for node in root.getchildren():
    print(node.tag) #输出节点的标签名

得到如下结果:

head
body

4)获取文本

有些元素中有文本,这个可以通过text属性获取。

#获取source元素中的文本
for node in root.xpath('//source'):
    print(node.text)

2、写入xml文档

1)创建文档(节点)

对于lxml来说,任意节点都可以保存成一个xml文档。

我们只需要给该节点加入属性、内容、子节点等等即可。

那么创建节点方法如下:

#coding:utf-8
from lxml import etree
 
#创建标签为root的节点
root = etree.Element('root')

在创建节点的同时,也可以给该节点加入命名空间:

root = etree.Element('root', nsmap={'xmlns':'http://www.w3.org/1999/xhtml'})

在上面的test.xml中,还有两组属性。可用set方法添加属性:

root.set('version', '1.2')
root.set('tag', 'test')

当然,也可以在创建节点的时候,就写入属性:

attribs = {'version':'1.2', 'tag':'test'}
root = etree.Element('root', attrib=attribs)

2)添加子节点

添加根节点之后,根节点下有两个子节点:head和body。

添加子节点有两种方法,先看方法1:

head = etree.Element('head')
root.append(head)

该方法是创建节点,再用append方法追加到root节点中。

还有一种方法,直接创建子节点:

head = etree.SubElement(root, 'head')

推荐使用第2种方法,比较快捷。

若需要写属性值,除了用set方法。etree.SubElement方法也可以像etree.Element方法一样直接写入属性。

head = etree.SubElement(root, 'head', attrib={'id':'head_id'})

3)添加文本

test.xml文档中,有几个地方需要添加文本。先给head添加title属性,并加入文本:

title = etree.SubElement(head, 'title')
title.text = 'test xml document'

直接给text赋值即可。

4)保存文档

文档写好之后,就保存文档。保存文档这里有两种方法。

一种为通过etree.tostring方法得到xml的文本,再手动写入。这个方法过于麻烦,就不讲了,也不推荐。

常规方法是通过etree的tree对象保存文件。代码如下:

#节点转为tree对象
tree = etree.ElementTree(root)
tree.write('test.xml', pretty_print=True, xml_declaration=True, encoding='utf-8', with_comments=True)

各个参数含义如下:

  1. 第1个参数是xml的完整路径(包括文件名);
  2. pretty_print参数是否美化代码;
  3. xml_declaration参数是否写入xml声明,就是我们看到xml文档第1行文字;
  4. encoding参数很明显是保存的编码;
  5. with_comments参数是否保留注释。

当你使用Python处理XML文件并且对注释进行修改时,你需要使用一个支持XML注释的XML解析器库。例如,使用Python内置的xml.etree.ElementTree来解析XML文档时,它是不会保留注释的,并且属性的顺序可能也会发生改变。但是,你可以使用第三方库lxml来处理XML文件并保留注释。

from lxml import etree

# 解析XML文件
doc = etree.parse('example.xml')

# 获取注释节点并进行修改
comment_node = doc.xpath('//comment()')[0]
comment_node.text = 'New comment'

# 保存修改后的XML文件,保留注释
doc.write('example.xml', encoding='utf-8', xml_declaration=True, pretty_print=True, with_comments=True)

在代码中,我们使用etree.parse方法解析XML文件,然后通过doc.xpath方法获取注释节点并进行修改。最后使用doc.write方法保存修改后的XML文件,确保传递参数with_comments=True以保留注释。

Edge 浏览器插件 WebTab - 免费ChatGPT

在这里插入图片描述

视频逐帧保存图片

import cv2
import os
# 打开视频文件
# 需要安装
# pip install opencv-python
path = r"***.mp4"
path_dir=r"pictures"
def get_frames():
    cap = cv2.VideoCapture(path)
    # 检查视频是否成功打开
    if not cap.isOpened():
        print("Error opening video stream or file")

    # 初始化帧计数器
    frame_count = 0

    # 循环逐帧读取视频
    while cap.isOpened():
        # 读取单帧
        ret, frame = cap.read()

        # 如果帧读取成功
        if ret:
            # 在这里添加对每一帧的处理代码

            # 保存当前帧为图像文件
            cv2.imwrite(os.path.join(path_dir,f"frame_{frame_count}.jpg"), frame)

            # 增加帧计数器
            frame_count += 1

        else:
            break

    # 清理资源
    cap.release()
    cv2.destroyAllWindows()
if __name__ == "__main__":
    get_frames()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flask旅游数据可视化-计算机毕设 附源码81319

flask旅游数据可视化 摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对旅游数据可视化等问题&…

阿里企业邮箱标准版、集团版和尊享版有什么区别?

阿里云企业邮箱版本分为免费版、标准版、集团版和尊享版&#xff0c;除了费用区别&#xff0c;功能方面有什么差异&#xff1f;如何选择企业邮箱版本&#xff1f;免费版0元适合初创型企业&#xff0c;标准版适合大、中、小型企业使用&#xff0c;涉及子公司之间邮箱通讯可以选择…

cesium多颗卫星绕着不同的轨道旋转示例

本示例的目的是介绍演示如何在vue+satellite项目中模拟多颗卫星的运行轨迹和覆盖状态。 直接复制下面的 vue+satellite源示例代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例代码相关API参考:示例效果 配置方式 1)查看基础设置:https://xiaozhuanlan.com…

knife4j 4.1.0(OpenAPI3)实现spring security或shiro权限注解内容显示

前两天写了个knife4j&#xff08;swagger2&#xff09;实现spring security或shiro权限注解内容显示&#xff0c;主要是使用knife4j 2.0.5来实现权限注解内容显示的扩展。 在Spring Boot 3 中只支持OpenAPI3规范&#xff0c;集成knife4j的stater&#xff1a;knife4j-openapi3-…

Deepin 20.08 linux 升级nvidia驱动 黑屏 报错nvrm api mismatch

驱动连接 https://us.download.nvidia.cn/XFree86/Linux-x86_64/535.54.03/NVIDIA-Linux-x86_64-535.54.03.run 安装过程 systemctl set-default multi-user.target reboot 重启到字符界面后 chmod x NVIDIA-Linux-x86_64-535.54.03.run sudo ./NVIDIA-Linux-x86_64-535.5…

C++(11):关联容器

关联容器和顺序容器有着根本的不同&#xff1a;关联容器中的元素是按关键字来保存和访问的。与之相对&#xff0c;顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。 虽然关联容器的很多行为与顺序容器相同&#xff0c;但其不同之处反映了关键字的作用。 关联容器…

服务器数据中了locked勒索病毒,有关locked勒索病毒的介绍与预防建议

随着网络的普及和科技技术的发展&#xff0c;网络安全问题日益突出。而其中&#xff0c;勒索病毒就是一种常见的网络安全威胁。一旦企业的服务器数据库被勒索病毒攻击&#xff0c;会导致企业内部的重要数据被加密&#xff0c;给工作和生产生活带了极大的困扰。下面就为大家介绍…

Python工具箱系列(三十七)

二进制文件操作&#xff08;上&#xff09; python比较擅长与文本相关的操作。但现实世界中&#xff0c;对于非文本消息的处理也很普遍。例如&#xff1a; ◆通过有线、无线传递传感器获得的测量数据。 ◆卫星通过电磁波发送测量数据。 ◆数据中心的数万台服务器发送当前CP…

Android Studio 配置 DCL 单例脚本

DCL&#xff08;Double-Checked Locking&#xff09;单例是一种用于创建单例对象的设计模式。单例模式是一种创建型模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。 DCL单例的核心思想是使用双重检查来保证只有在需要时才对实例进行实例化。它结合…

MIT 6.830 数据库系统 -- Lab One

MIT 6.830 Lab One 项目拉取SimpleDB存储结构一览SimpleDB特性说明Lab One练习一练习二练习三练习四练习五练习六练习七 项目拉取 原项目使用ant进行项目构建&#xff0c;我已经更改为Maven构建&#xff0c;大家直接拉取我改好后的项目即可: https://gitee.com/DaHuYuXiXi/si…

物联网助力鲜花冷链安全——温湿度监控系统

近几年来我国花卉生产的发展尤为迅速&#xff0c;生产面积逐年扩大&#xff0c;产值成倍增长&#xff0c;内销市场越来越旺&#xff0c;出口创汇也有较大幅度上升。 随着人民生活水平的提高和可支配收入的增加&#xff0c;人们对鲜花的需求日益增长&#xff0c;花卉市场的前景…

电子药盒语音芯片ic解决方案WT588F02B-8S,免屏实现精准较时设定

概述&#xff1a;电子药盒是一种具备定时语音提醒服药的贴心智能家居用品&#xff0c;每天的服药时间是预先设定好的&#xff0c;到了设定的时间提醒声音就会响起&#xff0c;服药者因此就可以准时服药。许多需要每天服药的人士&#xff0c;尤其是老年人群体&#xff0c;经常会…

Matlab论文插图绘制模板第105期—带缺口的分组填充箱线图

在之前的文章中&#xff0c;分享了Matlab带缺口的分组箱线图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下带缺口的分组填充箱线图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自…

算法leetcode|59. 螺旋矩阵 II(rust重拳出击)

文章目录 59. 螺旋矩阵 II&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 59. 螺旋矩阵 II&#xff1a; 给你一个正整数 n &#xff0c…

高速PCB设计中串行/并行信号的仿真与设计技巧

在高速PCB设计中&#xff0c;串行和并行信号的仿真是为了确保信号传输的准确性和完整性&#xff0c;随着系统数据传输速度的提高&#xff0c;准确模拟和优化信号的传输性能对于系统稳定性至关重要&#xff0c;那么你知道在高速PCB设计中&#xff0c;如何针对串行信号和并行信号…

jmeter夸线程组变量引用

通过BeanShell 后置处理程序引用函数&#xff1a; ${__setProperty(newvar,${oldvar},)}如下&#xff1a; 说明&#xff1a;HTTP_1返回结果msg的值为{“code”:200&#xff0c;“msg”:“操作成功”} 1.通过JSON提取器获取到要跨线程组的参数值 2.BeanShell后置处理程序引用…

杂谈:人到中年总得有点兴趣爱好

写在最前面&#xff1a; 前面一段写的是我咋喜欢的铜钱&#xff0c;后面一段是我对学习和转化的一点儿见解&#xff0c;有兴趣可以看看&#xff0c;甚至可以跳过前面去看看后面的内容~ 前几天跟朋友吃饭聊天&#xff0c;不知不觉中大家都到了中年&#xff0c;也都有点儿兴趣爱好…

SAP从入门到放弃系列之工艺路线-物料分配与组件分配-part1

文章概览 一、概述&#xff1a;二、基本概念&#xff1a;2.1、物料分配概览2.1.1物料适用场景&#xff1a;2.1.2物料分配方式&#xff1a; 2.2、组件分配概览2.2.1 组件适用场景2.2.2 组件分配注意事项&#xff1a; 三、测试示例3.1、准备工艺路线组数据&#xff1a;3.2、工艺路…

【Java】数组中的拷贝方法与初步理解深浅拷贝

文章目录 普通的数组拷贝函数可以指定区间拷贝的数组拷贝函数深浅拷贝 普通的数组拷贝函数 Arrays.copyOf(array,array.length) 我们进入到这个函数的源码中&#xff0c;可以看到这两个参数一个是原始数组&#xff0c;一个是拷贝后的新的长度。 例如&#xff1a; public cla…

YOLOv5图像和视频对象生成边界框的目标检测实践(GPU版本PyTorch错误处理)

识别图像和视频里面的对象&#xff0c;在计算机视觉中是一个很重要的应用&#xff0c;比如无人驾驶&#xff0c;这个就需要实时的检测到周边环境的各种对象&#xff0c;并及时做出处理。目标检测在以往的文章中有重点讲解过几种&#xff0c;其中Faster R-CNN的源码解读&#xf…