[python小记]使用lxml修改xml文件,并遍历目录
这次的目的是遍历目录,把目标文件及相应的目录信息更新到xml文件中。在经过痛苦的摸索之后,从python自带的ElementTree投奔向了lxml。而弃用自带的ElementTree的原因就是,namespace。
XML命名空间
作用是为避免元素命名冲突,当出现命名冲突的时候,可以使用前缀来避免命名冲突,就如:
<h:table>
<h:tr>
<h:td>App Store</h:td>
<h:td>Google Play</h:td>
</h:tr>
</h:table>
使用命名空间(Namespaces):
<f:table xmlns:f="http://www.w3school.com.cn/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
添加的xmlns属性,就会前缀赋予了一个与某个命名空间相关联的限定名称
lxml安装:
- 安装pip
- 安装setuptools: Windows(Powershell3)输入
> (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | python -
- 下载lxml.whl,根据python版本选择合适的whl下载:地址
- 安装wheel
pip install wheel
- 安装下载好的whl文件
pip install .\lxml-3.5.0-cp34-none-win_amd64.whl
lxml使用:
lxml的教程网站为:http://lxml.de/index.html
使用lxml可以这样import:
from lxml import etree
导入并解析xml文件:
tree = etree.parse(fileName)
获取xml的命名空间:
root = tree.getroot()
nsmap = root.nsmap
如果xml文件使用的默认命名空间:
>>> nsmap
{None: 'http://schemas.microsoft.com/developer/msbuild/2003'}
要查找某节点,使用到xpath:
def getNode(tree, node):
NS_PREFIX = "default"
root = tree.getroot()
nsmap = root.nsmap
nsmap[NS_PREFIX] = nsmap[None]
nsmap.pop(None)
return tree.xpath("//{0}:{1}".format(NS_PREFIX, node), namespaces=nsmap)
添加子节点:
etree.SubElement(node, tag)
最后写入到xml文件中:
fileHandler = open(filePath, "wb")
tree.write(fileHandler, encoding="utf-8", xml_declaration=True, pretty_print=True)
fileHandler.close()
xpath基础
xpath使用路径表达式来选取xml文档中的节点或节点集。
| 表达式 | 描述 |
| nodename | 从当前节点的子节点中,选取tag为nodename的所有节点 |
| / | 从根节点选取 |
| // | 任意位置选取 |
| . | 选取当前节点 |
| .. | 选取父节点 |
| @att | 选取带属性att的节点 |
| [] | 谓语 |
例子:
tree.xpath("//Folder[@Include]")
#选取带Include属性的Folder节点
tree.xpath("//ItemGroup[./Folder]")
4 tree.xpath("//ItemGroup[Folder]")
#选取含有Folder子节点的ItemGroup节点
遍历目录:
遍历目录有两个方法:os.list_dir与os.walk。各自的用例:
import os def list_dir(rootDir):
for lists in os.listdir(rootDir):
path = os.path.join(rootDir, lists)
print(path)
if os.path.isdir(path):
list_dir(path) def walk(rootDir):
for root, dirs, files in os.walk(rootDir):
for d in dirs:
print(os.path.join(root, d))
for f in files:
print(os.path.join(root, f))
[python小记]使用lxml修改xml文件,并遍历目录的更多相关文章
- 面试官问我:如何在 Python 中解析和修改 XML
摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...
- MyEclipse如何修改XML文件默认行宽
1.MyEclipse如何修改XML文件默认行宽 Windows--->Preferences--->搜索xml--->XML--->XML Source--->Form ...
- MyEclipse如何修改XML文件默认打开的编辑器
1.MyEclipse如何修改XML文件默认打开的编辑器 Windows--->Preferences--->General--->Editors--->File Associ ...
- Java 操纵XML之修改XML文件
Java 操纵XML之修改XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...
- python中用ElementTree.iterparse()读取xml文件中的多层节点
我在使用Python解析比较大型的xml文件时,为了提高效率,决定使用iterparse()方法,但是发现根据网上的例子:每次if event == 'end':之后elem.clear()或者是每次 ...
- Java&Xml教程(七)使用JDOM修改XML文件内容
JDOM提供了非常灵活的方式操作XML文件,使用JDOM非常简单而且代码简洁可读性强.前面我们学习了如何使用JDOM解析XML文件,本节介绍如何使用JDOM修改XML文件内容. 在这个教程中,我们准备 ...
- Java&Xml教程(三)使用DOM方式修改XML文件内容
DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素.删除元素.修改元素值.修改元素属性等操作. 我们的XML文件,内容如下: employee.xml <?xml version= ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- python实现随机复制若干个文件到新目录
python实现随机复制若干个文件到新目录 1说明 1.1 目的 随机选择一个文件下的若干个文件,并将文件复制到新文件夹下 1.2 要求 需要将random_select_and_copy_file. ...
随机推荐
- 一个简单的WebService服务
现在,网上提供的免费的webservice服务的网站: http://www.webxml.com.cn/ 从扩展名上看,是 .net构建的网站. 看看功能的实现效果: 需求:我们要远程调用手机号归属 ...
- linq直接执行sql语句
1.ExecuteQuery方法 看命名,我们很容易联想到ado.net里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该&quo ...
- [转]SSIS Execute SQL Task : Mapping Parameters And Result Sets
本文转自:http://www.programmersedge.com/post/2013/03/05/ssis-execute-sql-task-mapping-parameters-and-res ...
- [Python爬虫] 之十二:Selenium +phantomjs抓取中的url编码问题
最近在抓取活动树网站 (http://www.huodongshu.com/html/find.html) 上数据时发现,在用搜索框输入中文后,点击搜索,phantomjs抓取数据怎么也抓取不到,但是 ...
- 安装64位office时提示已安装32位的office
运行 regedit,进入到HKEY_CLASSES_ROOT\Installer\Products下,删除0000510开头的项,没有00005我把00002....的删了也可以
- [HTML5] Add an SVG Image to a Webpage and Get a Reference to the Internal Elements in JavaScript
We want to show an SVG avatar of the patio11bot, so we'll do that in three ways: Using an img tag - ...
- SQLServer:探讨EXEC与sp_executesql的区别详解
摘要 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的 ...
- Java程序的结构
1.由一个或多个独立的类组成: 2.最多一个公有类 3.源代码文件名必须与类名相同 4.类由一个或多个方法组成,其中公有类中的main()方法作为程序的入口. 注:javaSE中一定有main方法. ...
- 制作mac U盘启动
之前在windows电脑上装系统,U盘,光盘都可以! 当然在mac电脑上也是可以的! 公司电脑mac mini 没有光驱,只有用U盘装了!折腾了一天,就是做不上10.9的U盘启动,最后发现是,10.9 ...
- 【MVC5】日期选择控件DatePicker
项目中使用了Bootstrap,日期控件就选择了依赖于bootstrap的DatePicker. 在App_Start\BundleConfig.cs中引用css和js文件: bundles.Add( ...