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. 48.Python中ORM模型实现mysql数据库基本的增删改查操作

    首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...

  2. How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Written by Rahul, Updated on April 3, 20

    本文系转载备份 请阅读点击下面链接阅读原文以获取更佳地阅读体验.谢谢. How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Writt ...

  3. Go-结构体,结构体指针和方法

    https://cloud.tencent.com/developer/article/1482382 4.1.结构体 结构体:讲一个或多个变量组合到一起形成新的类型,这个类型就是结构体,结构体是值类 ...

  4. 假期学习【五】RDD编程实验四

    今天完成了实验四的第二问和第三问 第二题 对于两个输入文件 A 和 B,编写 Spark 独立应用程序,对两个文件进行合并,并剔除其 中重复的内容,得到一个新文件 C.下面是输入文件和输出文件的一个样 ...

  5. dubbo的服务consumer与provider使用的api版本不一致,是否有影响

    dubbo的服务consumer与provider使用的api版本不一致,是否有影响 最近新接手一个项目,看到定义的dubbo接口有些很奇葩的设定. 一.消费端 与 服务端 调用的接口中的数据包装类型 ...

  6. HTTPClient模拟Get和Post请求

    一.模拟Get请求(无参) 首先导入HttpClient依赖 <dependency> <groupId>org.apache.httpcomponents</group ...

  7. js上传文件工具类

    个人博客 地址:http://www.wenhaofan.com/article/20180808210417 jQuery.extend({ uploadUtil:function(){ } }); ...

  8. 1米(m)=10分米(dm)=10^2厘米(cm)=10^3毫米(mm) =10^6微米(um)=10^9纳米(nm)=10^10埃米(A)=10^12皮米(pm)

    millimeter  毫米 micrometer 微米 nanometer 纳米 square meter 平方米

  9. webpack 之搭建本地服务器

    搭建本地服务器 webpack提供了一个可选的本地开发服务器,这个本地服务器基于node.js搭建,内部使用express框架,可以实现 我们想要的让浏览器自动刷新显示我们修改后的结果 不过它是一个单 ...

  10. EF CodeFirst 一对一、一对多、多对多关系

    一对一关系 如图,无需专门指定,系统会默认在Person表中生成字段Pet_Id为Pet表的外键(一对一). Require:必要的(一对一)  Optional:可选的(一对零)  Principa ...