IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python 读写.xml文件 -> 正文阅读

[Python知识库]python 读写.xml文件

1 XML文件读取

测试文件 test.xml 内容如下:

<?xml version="1.0" encoding="utf-8"?>

<root>
    <time>
        <years>2022</years>
        <month>04</month>
        <day>24</day>
    </time>
    <PORT_LIST>
		<COM Name="COM3" Remarks="" Baund="9600" Parity="0" StopBit="0" DataBit="0" FlowCtrl="0" TransMode="0" CharType="0" BreakTime="10" />
		<COM Name="COM4" Remarks="" Baund="9600" Parity="0" StopBit="0" DataBit="0" FlowCtrl="0" TransMode="0" CharType="0" BreakTime="10" />
		<NET Name="NET000" Remarks="" DesIP="127.0.0.1" LocalPortID="54125" DesPortID="502" />
		<NET Name="NET001" Remarks="" DesIP="127.0.0.1" LocalPortID="502" DesPortID="502" />
	</PORT_LIST>
</root>

1 获得 .xml文件根节点

#!/usr/bin/python
# -*- coding: GBK -*-
import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom

tree = ET.parse('test.xml')
root = tree.getroot()  #获得根节点

2 获得节点的属性

# <item name="月" addr="33"/>
# 获得节点
month = node.attrib['name']
addr  = node.attrib['addr']

3 获得节点的子节点

4 Supported XPath syntax

在这里插入图片描述

  • 1 路径查找:
#查找到root子节点 time
nodetime = root.find('time')
print(nodetime.text )
#查找到root子节点 time的子节点years
node_years = root.find('time/years')
print(node_years.text )
  • 2 查找含有某一属性的节点
# 查找到 属性="COM3"的所有节点
nodecom3 = root.findall(".//*[@Name='COM3']")
print(nodecom3, type(nodecom3)) #nodecom3 list
print(nodecom3[0].attrib['Baund'])
  • 3 查找属性等于某一值得节点
在这里插入代码片

2 写XML文件

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom


#tree = ET.parse('01.xml')
'''
中文这个是转换前的,现在是打算把
<type>r</type>
<format>bin</format>
格式的转换到yx组
其他<type>r</type>
转换到yc组
'''

class  XmlConvert(object):
    def __init__(self, xmlfile):
        self.tree = ET.parse(xmlfile)
        self.root = self.tree.getroot()
        self.node_param_list = []
        for node in list(self.root):
            if node.tag == 'params':
                for node_param in node:
                    self.node_param_list.append(node_param)  #node param  -> <params><param></param></params>
        #  遥信信息
        self.match_nodes = self.get_yx_info()
        print(self.match_nodes)

        for node in self.match_nodes:
            print(node.findtext('name'), node.attrib['groupid'], node.attrib['addr'] )
        #写 .xml
        #dom= minidom.Document()
        self.new_xml("新文件.xml")

    def new_xml(self,xmlfile):
        dom = minidom.getDOMImplementation().createDocument(None, 'Root', None)
        root = dom.documentElement
        for i in range(5):
            element = dom.createElement('Name')
            element.appendChild(dom.createTextNode('default'))
            element.setAttribute('age', str(i))
            root.appendChild(element)
        # 保存文件
        with open(xmlfile, 'w', encoding='utf-8') as f:
            dom.writexml(f, addindent='\t', newl='\n', encoding='utf-8')


    def get_yx_info(self):
        self.match_nodes = []
        for node_param in self.node_param_list:
            #判断子节点  <type>rw</type> <format>bin</format>
            flag = 0
            #if node_param.findtext("type") == 'rw' or node_param.findtext("format") == 'bin':
            if node_param.findtext("type") == 'rw':
                flag += 1
            if node_param.findtext("format") == 'bin':
                flag += 1
            if 2 == flag: self.match_nodes.append(node_param)
        return  self.match_nodes


if __name__ == '__main__':
    # tree = ET.parse('PCS调试串口通信点表.xml')
    XmlConvert('PCS调试串口通信点表.xml')
    pass
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom


#tree = ET.parse('01.xml')
'''
中文这个是转换前的,现在是打算把
<type>r</type>
<format>bin</format>
格式的转换到yx组
其他<type>r</type>
转换到yc组
'''

class Xmlwrite(object):
    def __init__(self, xml):
        self.xml_name = xml
        self.dom = minidom.getDOMImplementation().createDocument(None, 'dmp', None)
        #设置root节点属性
        root_attrib = {'station': 'PCS塔机测试','name': 'PCS_TOWER', 'kind':'PCS_TOWER' }
        #self.set_node_attrib(self.xmlroot, root_attrib )
        self.xmlroot = self.dom.documentElement
        for i in range(5):
            # element = self.dom.createElement('Name')
            # element.appendChild(self.dom.createTextNode('default'))
            # element.setAttribute('age', str(i))
            # #element.setAttribute("station", "PCS塔机测试")
            # self.set_node_attrib(element , root_attrib )
            node = self.new_node('tag_name', "goodjob", None )
            self.set_node_attrib(node, root_attrib )
            #self.xmlroot.appendChild(element)

    
    #设置node属性
    def set_node_attrib(self, node , nodeinfo ):
        for key,value in  nodeinfo.items():
            node.setAttribute(key,value)

    #新建node
    def new_node(self, tag_name , text , parent_node=None ):
        node = self.dom.createElement(tag_name)
        node.appendChild(self.dom.createTextNode(text))
        if parent_node:
            parent_node.appendChild(node)
        else:
            self.xmlroot.appendChild(node)
        return node
    #保存文件
    def save_xml(self, name=None):
        if name:
        # 保存文件
            with open( name, 'w', encoding='utf-8') as f:
                self.dom.writexml(f, addindent='\t', newl='\n', encoding='utf-8')
        else:
            with open( self.xml_name, 'w', encoding='utf-8') as f:
                self.dom.writexml(f, addindent='\t', newl='\n', encoding='utf-8')






class  XmlConvert(object):
    def __init__(self, xmlfile):
        self.tree = ET.parse(xmlfile)
        self.root = self.tree.getroot()
        self.node_param_list = []
        for node in list(self.root):
            if node.tag == 'params':
                for node_param in node:
                    self.node_param_list.append(node_param)  #node param  -> <params><param></param></params>
        #  遥信信息
        self.match_nodes = self.get_yx_info()
        print(self.match_nodes)

        for node in self.match_nodes:
            print(node.findtext('name'), node.attrib['groupid'], node.attrib['addr'] )
        #写 .xml
        #dom= minidom.Document()
        #self.new_xml("新文件.xml")

    def new_xml(self,xmlfile):
        dom = minidom.getDOMImplementation().createDocument(None, 'Root', None)
        root = dom.documentElement
        for i in range(5):
            element = dom.createElement('Name')
            element.appendChild(dom.createTextNode('default'))
            element.setAttribute('age', str(i))
            root.appendChild(element)
        # 保存文件
        with open(xmlfile, 'w', encoding='utf-8') as f:
            dom.writexml(f, addindent='\t', newl='\n', encoding='utf-8')


    def get_yx_info(self):
        self.match_nodes = []
        for node_param in self.node_param_list:
            #判断子节点  <type>rw</type> <format>bin</format>
            flag = 0
            #if node_param.findtext("type") == 'rw' or node_param.findtext("format") == 'bin':
            if node_param.findtext("type") == 'rw':
                flag += 1
            if node_param.findtext("format") == 'bin':
                flag += 1
            if 2 == flag: self.match_nodes.append(node_param)
        return  self.match_nodes


if __name__ == '__main__':
    # tree = ET.parse('PCS调试串口通信点表.xml')
    #XmlConvert('PCS调试串口通信点表.xml')
    newxml =  Xmlwrite("convert.xml")
    newxml.save_xml("转化后文件.xml")
    pass
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:38:17  更:2022-04-26 11:40:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:43:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码