1,处理xml的包

from xml.etree import ElementTree as ET

2,如何写出xml文件

xml文件和html中的元素很像,有父级子集之说,

root = ET.Element('opencv_storage')    #创建根元素,根元素的变量名叫root,元素名字叫opencv_storage
person1 = ET.SubElement(root, 'cameraId') #在根元素上创建子元素,子元素的变量名叫person1,元素名叫cameraID
person1.text="camera url" #persion1对应的元素内容是"camera url"
intr = ET.SubElement(root, 'intrinsic_parameters', {'type_id':'opencv-matrix'}) #在根元素上再加一个子元素叫intr,元素有个属性是“type_id",属性的内容是'opencv-matrix'
rows = ET.SubElement(intr, 'rows') #intr元素上加子元素,以下同理
rows.text="3"
cols=ET.SubElement(intr, 'cols')
cols.text="3"
dt=ET.SubElement(intr, 'dt')
dt.text="d"
data=ET.SubElement(intr, 'data')
data.text=" 1 2 3 1 2 3 1 2 3 "
dist=ET.SubElement(root, 'distortion_parametes',{"type_id":"opencv-matrix"})
rows2=ET.SubElement(dist, 'rows')
rows2.text="1"
cols2=ET.SubElement(dist, 'cols')
cols2.text="5"
dt2=ET.SubElement(dist, 'dt')
dt2.text='d'
data2=ET.SubElement(dist, 'data')
data2.text="1 2 3 4 5"
tree = ET.ElementTree(root)#将根目录转化为xml树状结构(即ElementTree对象) 
ET.dump(root)#在终端显示整个xml内容
tree.write('sample.xml', encoding="utf-8", xml_declaration=True)#写入xml文件 

sample.xml的文件内容:

<?xml version='1.0' encoding='utf-8'?>
<opencv_storage>
<cameraId>camera url</cameraId> <intrinsic_parameters type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>d</dt>
<data>1 2 3 1 2 3 1 2 3 </data>
</intrinsic_parameters> <distortion_parametes type_id="opencv-matrix">
<rows>1</rows>
<cols>5</cols>
<dt>d</dt>
<data>1 2 3 4 5</data>
</distortion_parametes>
</opencv_storage>

3,如何解析xml文件

以解析上一个sample.xml为例:

    try:
tree = ET.parse("./sample.xml”)
root = tree.getroot()
except Exception as e:
print("xml文件打开错误",e)
return -1
for i in root: #可以直接遍历父元素来获取子元素
if i.tag == "intrinsic_parameters": #i.tag是元素名
matrix_height=int(i.find("rows").text) #i.find("rows")获取子元素中名字叫rows的元素,不会递归查找,如有多个只获取第一个。findall可以获取多个,i.text()获取某元素的内容
matrix_width=int(i.find("cols").text)
matrix_str=i.find("data").text
if i.tag == "distortion_parametes":
coefs_height=int(i.find("rows").text)
coefs_width=int(i.find("cols").text)
coefs_str=i.find("data").text #获取到元素内容以后可以自行解析

补充:

root.attrib:获取属性

Element.get():访问标签的属性值

Element.set():添加和修改标签的属性和属性值。

Element.append():添加孩子节点

4,拓展

这样的xml:sample.xml

<?xml version="1.0"?>
<actors xmlns:fictional="http://characters.example.com"
xmlns="http://people.example.com">
<actor>
<name>John Cleese</name>
<fictional:character>Lancelot</fictional:character>
<fictional:character>Archie Leach</fictional:character>
</actor>
<actor>
<name>Eric Idle</name>
<fictional:character>Sir Robin</fictional:character>
<fictional:character>Gunther</fictional:character>
<fictional:character>Commander Clement</fictional:character>
</actor>
</actors>

通过这个操作:

from xml.etree import ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
ns = {'real_person': 'http://people.example.com',
'role': 'http://characters.example.com'} for actor in root.findall('real_person:actor', ns):
name = actor.find('real_person:name', ns)
print(name.text)
for char in actor.findall('role:character', ns):
print(' |-->', char.text)

生成如下代码:(还没看懂)

可参考

John Cleese
|--> Lancelot
|--> Archie Leach
Eric Idle
|--> Sir Robin
|--> Gunther
|--> Commander Clement

5,opencv自带的xml处理器

opencv自带一个文件处理器,名字叫cv2.FileStorage,用法如下:

import cv2
import numpy as np #从xml文件中读出
aa=cv2.FileStorage("./hehe.xml",cv2.FileStorage_READ)
print(aa.getNode("intrinsic_parameters").mat()) #写入xml文件
fs = cv2.FileStorage('./hehe.xml', cv2.FileStorage_WRITE)
aa=range(9)
bb=range(5)
camera_matrix=np.array(aa).reshape(3,3)
dist_coefs=np.array(bb).reshape(1,5)
fs.write("intrinsic_parameters", camera_matrix)
fs.write("distortion_parametes", dist_coefs)

python 常用包之xml文件处理的更多相关文章

  1. Python常用内置模块之xml模块

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

  2. python解析VOC的xml文件并转成自己需要的txt格式

    在进行神经网络训练的时候,自己标注的数据集往往会有数据量不够大以及代表性不强等问题,因此我们会采用开源数据集作为训练,开源数据集往往具有特定的格式,如果我们想将开源数据集为我们所用的话,就需要对其格式 ...

  3. python常用模块之xml模块

    python常用模块之xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,在json还没诞生的年代,大家都是使用xml,目前很多传统公司的系 ...

  4. Python 常用包收集

    转自:http://www.cnblogs.com/Logic0/archive/2010/09/03/1850382.html 常用的自带类库 常用的外部类库       Tkinter———— P ...

  5. Windows平台 python 常用包的安装

    1. yaml 从http://pyyaml.org/wiki/PyYAML下载对应版本的exe,直接安装就可以. 2. pip 从https://pypi.python.org/pypi/pip#d ...

  6. 【Python】用Python打开csv和xml文件

    一.csv文件的读取1 #coding=utf-8 import csv with open("F:\\script\\py_scripts\\test2.csv","r ...

  7. Python:Dom生成XML文件(写XML)

    http://www.ourunix.org/post/327.html 在python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文 ...

  8. python cookbook第三版学习笔记七:python解析csv,json,xml文件

    CSV文件读取: Csv文件格式如下:分别有2行三列. 访问代码如下: f=open(r'E:\py_prj\test.csv','rb') f_csv=csv.reader(f) for f in ...

  9. python常用包及功能介绍

    1.NumPy数值计算 NumPy是使用Python进行科学计算的基础包,Numpy可以提供数组支持以及相应的高效处理函数,是Python数据分析的基础,也是SciPy.Pandas等数据处理和科学计 ...

随机推荐

  1. Oracle 中关于 Group By 子句与多行函数嵌套搭配使用的注意事项

    目录 你需要知道的 啥叫单行函数 啥叫多行函数 如何理解这个概念 Group by 子句使用规则 看一道 071 考题 你需要知道的 提到 Group by 子句,你需要先理解一个东西:函数的分类.提 ...

  2. C# 索引器的理解和使用

    概述 此部分内容引用自MSDN文档 使用索引器可以用类似于数组的方式为对象建立索引. get 取值函数返回值. set 取值函数分配值. this 关键字用于定义索引器. value 关键字用于定义 ...

  3. 推荐7个GitHub项目

    CS-Notes https://github.com/CyC2018/CS-Notes 技术面试必备基础知识.Leetcode.计算机操作系统.计算机网络.系统设计.Java.Python.C++. ...

  4. Nginx proxy_set_header 配置注意事项

    转载自:https://www.jianshu.com/p/fd16b3d10752 如果没有特别注意 proxy_set_header 配置,使用 proxy_set_header 可能会引起以下问 ...

  5. [AtCoder Code Festival 2017 QualB D/At3575] 101 to 010 - dp

    [Atcoder Code Festival 2017 QualB/At3575] 101 to 010 有一个01序列,每次可以选出一个101,使其变成010,问最优策略下能操作几次? 考虑像 11 ...

  6. Eclipse中配置Tomcat容器

    Tomcat 安装与配置 Tomcat是Apache 软件基金会(Apache Software Foundation)核心项目之一,支持最新的Servlet 和JSP 规范.因为Tomcat 技术先 ...

  7. C++——指针3

    指针作为函数参量 指针作为函数参量,以地址的方式传递数据,可以用来返回函数处理结果:实参是数组名时形参可以是指针. 题目:读入三个浮点数,将整数部分和小数部分分别输出 #include <ios ...

  8. Ubuntu下vsc+python3配置

    我发现直接搜这个很容易得到过时的文章py2请滚蛋好么 1.首先下去VSC官网下载.deb的安装包,安装好vsc,打开后安装PYTHON,reload下.别啊忘记修改路径,setting下搜python ...

  9. 【音乐欣赏】《I Don't Even Care About You》 - Missio

    曲名:I Don't Even Care About You 作者:Missio [00:31.18]Depressed again [00:34.66]Morning comes too fast ...

  10. 记录 shell学习过程(3) if 的格式

    ] #-e 为检测目录或文件是否存在 !为取反 then mkdir -v /tmp/ echo 'ok' fi if else if [ $USER == 'root' ] then echo 'h ...