当前位置:首页 > 编程教程 > Python技术文章 > python利用lxml读写xml格式的文件

详解python使用lxml操作xml格式文件

  • 发布时间:
  • 作者:码农之家
  • 点击:121

这篇文章主要知识点是关于python、lxml、xml、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Python渗透测试编程技术:方法与实践
  • 类型:Python编程大小:167.2 MB格式:PDF作者:李华峰
立即下载

python利用lxml读写xml格式的文件

之前在转换数据集格式的时候需要将json转换到xml文件,用lxml包进行操作非常方便。

1. 写xml文件

a) 用etree和objectify

from lxml import etree, objectify

E = objectify.ElementMaker(annotate=False)
anno_tree = E.annotation(
  E.folder('VOC2014_instance'),
  E.filename("test.jpg"),
  E.source(
    E.database('COCO'),
    E.annotation('COCO'),
    E.image('COCO'),
    E.url("http://test.jpg")
  ),
  E.size(
    E.width(800),
    E.height(600),
    E.depth(3)
  ),
  E.segmented(0),
)

etree.ElementTree(anno_tree).write("text.xml", pretty_print=True)

输出的test.xml文件内容如下:

```

如果需要在anno_tree的基础上加其他标签的话用append即可:

E2 = objectify.ElementMaker(annotate=False)
anno_tree2 = E2.object(
  E.name("person"),
  E.bndbox(
    E.xmin(100),
    E.ymin(200),
    E.xmax(300),
    E.ymax(400)
  ),
  E.difficult(0)
)
anno_tree.append(anno_tree2)

上面的输出就变成了:

<annotation>
 <folder>VOC2014_instance/person</folder>
 <filename>test.jpg</filename>
 <source>
  <database>COCO</database>
  <annotation>COCO</annotation>
  <image>COCO</image>
  <url>http://test.jpg</url>
 </source>
 <size>
  <width>800</width>
  <height>600</height>
  <depth>3</depth>
 </size>
 <segmented>0</segmented>
 <object>
  <name>person</name>
  <bndbox>
   <xmin>100</xmin>
   <ymin>200</ymin>
   <xmax>300</xmax>
   <ymax>400</ymax>
  </bndbox>
  <difficult>0</difficult>
 </object>
</annotation>

b) 用etree和SubElement

annotation = etree.Element("annotation")
etree.SubElement(annotation, "folder").text = "VOC2014_instance"
etree.SubElement(annotation, "filename").text = "test.jpg"
source = etree.SubElement(annotation, "source")
etree.SubElement(source, "database").text = "COCO"
etree.SubElement(source, "annotation").text = "COCO"
etree.SubElement(source, "image").text = "COCO"
etree.SubElement(source, "url").text = "http://test.jpg"
size = etree.SubElement(annotation, "size")
etree.SubElement(size, "width").text ='800' # 必须用string
etree.SubElement(size, "height").text = '600'
etree.SubElement(size, "depth").text = '3'
etree.SubElement(annotation, "segmented").text = '0'
key_object = etree.SubElement(annotation, "object")
etree.SubElement(key_object, "name").text = “person”
bndbox = etree.SubElement(key_object, "bndbox")
etree.SubElement(bndbox, "xmin").text = str(100)
etree.SubElement(bndbox, "ymin").text = str(200)
etree.SubElement(bndbox, "xmax").text = str(300)
etree.SubElement(bndbox, "ymax").text = str(400)
etree.SubElement(key_object, "difficult").text = '0'
doc = etree.ElementTree(annotation)
doc.write(open("test.xml", "w"), pretty_print=True)

2. 读xml

这里可以用xpath直接提取所需的元素的值。比如想要获取上面test.xml文件的x, y坐标:

tree = etree.parse("test.xml")
# get bbox
for bbox in tree.xpath('//bndbox'):  # 获取bndbox元素的内容
  for corner in bbox.getchildren(): # 便利bndbox元素下的子元素
    print corner.text  # string类型


参考

http://lxml.de/tutorial.html

https://stackoverflow.com/questions/12657043/parse-xml-with-lxml-extract-element-value

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

Python 相关电子书
学习笔记
网友NO.688810

Python3.5以上版本lxml导入etree报错的解决方案

在python中安装了lxml-4.2.1,在使用时发现导入etree时IDE中报错Unresolved reference 其实发现,不影响使用,可以正常运行,对于我这种要刨根问底的人不搞明白怎么能罢休了,要保证代码不红 就研究了下源码,通过源码中可以发现,html中继承了etree 看下图这里也是为啥前面出红但还是能顺利执行了 那么我们使用的时候就得变换下了:如下使用, 哎谁让etree是二进制文件了,希望下一个版本会有好的改善,通过github看源码,发现是cpython写的编译成的二进制文件,如果对见红有恐惧的,就使用如下方式解决吧 from lxml import htmlhtml.etree.HTML("") 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。 ……

网友NO.128243

Python pip安装lxml出错的问题解决办法

Python pip安装lxml出错的问题解决办法 1. 在使用pip安装lxml过程中出现了一下错误: pip install lxml C:\Users\Chenpip install lxml Collecting lxml Using cached lxml-3.5.0.tar.gz Installing collected packages: lxml Running setup.py install for lxml ... error Complete output from command "d:\program files\python\python.exe" -u -c "import setuptools, tokenize;__file__='C:\\Users\\CHENJU~1\\AppData\\Local\\Temp\\pip-build-id5180h6\\lxml\\setup.py'; Building lxml version 3.5.0. Building without Cython. ERROR: b"'xslt-config' \xb2\xbb\xca\xc7\xc4\xda\xb2\xbf\xbb\xf2\xcd\xe2\xb2\xbf\xc3\xfc\xc1\xee\xa3\xac\xd2\xb2\xb2\xbb\xca\xc7\xbf\xc9\xd4\xcb\xd0\xd0\xb5\xc4\xb3\xcc\xd0\xf2\r\n\xbb\xf2\xc ** make sure the development packages of libxml2 and libxslt are installed ** Using build configuration of libxslt running install running build running build_py creating build creating build\lib.win32-3.5 creating build\lib.win32-3.5\lxml copying src\lxml\builder.py - build\lib.win……

网友NO.587959

Python爬虫基础之XPath语法与lxml库的用法详解

前言 本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 XPath 即为 XML 路径语言,它是一种用来确定 XML(标准通用标记语言的子集)文档中某部分位置的语言。 XPath 基于 XML 的树状结构,提供在数据结构树中找寻节点的能力。 XPath 同样也支持HTML。 XPath 是一门小型的查询语言。 python 中 lxml库 使用的是 Xpath 语法,是效率比较高的解析方法。 下面话不多说了,来一起看看详细的介绍吧 安装 为什么要用这个库呢,因为要写爬虫啊,利用lxml库来解析 HTML 代码,同时lxml也继承了libxml2的特性自动修正HTML代码,利用pip安装即可 pip install lxml XPath语法 XPath是一门在XML文档中查找信息的语言,可以用于在XML文档中通过元素和属性进行导航 举个栗子 我们可以使……

网友NO.135706

Python爬取豆瓣电影数据并且提取值xpath和lxml模块(代码)

本篇文章给大家带来的内容是关于Python爬取豆瓣电影数据并且提取值xpath和lxml模块(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 工具:Python 3.6.5、PyCharm开发工具、Windows 10 操作系统、谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title、链接地址、图片、评价人数、评分等 网址:https://movie.douban.com/chart 语法要点: xpath语法: 谷歌浏览器安装 xpath helper插件:帮助我们从elements中定位数据 1、选择节点(标签) (1)、/html/head/meta:能够选中html下的所有的meta标签 (2)、//li:当前页面上的所有的li标签 (3)、/html/head//link:head下的所有link标签 2、//:能够从任意节点开始选择 (1)、//li:当前页面上的所有的li标签 (2)、/html/head//link:head下的所有的link标签 3、@符号的用途 (1)、选择具体某个元素://p[@class='feed'……

网友NO.122946

python lxml中etree的简单应用

我一般都是通过xpath解析DOM树的时候会使用lxml的etree,可以很方便的从html源码中得到自己想要的内容。 这里主要介绍一下我常用到的两个方法,分别是etree.HTML()和etree.tostrint()。 1.etree.HTML() etree.HTML()可以用来解析字符串格式的HTML文档对象,将传进去的字符串转变成_Element对象。作为_Element对象,可以方便的使用getparent()、remove()、xpath()等方法。 如果想通过xpath获取html源码中的内容,就要先将html源码转换成_Element对象,然后再使用xpath()方法进行解析。例如,这里有一段最简单的html源码:"htmlbodyh1This is a test/h1/body/html",现在想要得到h1标签中的文本,可以这样实现: # encoding=utf8 from lxml import etree html = 'htmlbodyh1This is a test/h1/body/html'# 将html转换成_Element对象_element = etree.HTML(html)# 通过xpath表达式获取h1标签中的文本text = _element.xpath('//h1/text()')print 'result is: ', ……

<
1
>

Copyright 2018-2020 www.xz577.com 码农之家

版权投诉 / 书籍推广 / 赞助:520161757@qq.com

idea注册码