[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. ...
随机推荐
- Android开发高级进阶——多进程间通信
一. 什么是多进程? 多进程就是多个进程的意思,那么什么是进程呢? 当一个应用在开始运行时,系统会为它创建一个进程,一个应用默认只有一个进程,这个进程(主进程)的名称就是应用的包名. 进程的特点: 进 ...
- iOS:KVC和KVO
来源: 对月流 链接:http://www.jianshu.com/p/f1393d10109d 写在前面: 关于KVC和KVO各种博客多了去了,重新整理下,就当是温习一下吧,也还算是个新手,不对的 ...
- 流畅的python第十一章接口学习记录
鸭子协议(忽略对象真正类型,转而关注对象有没有实现所需的方法,签名和语义) 标准库中的抽象基类 collections.abc模块中的抽象基类 抽象方法是抽象基类中用来强制子类必须实现的方法,如果子类 ...
- from表单实现无跳转上传文件,接收页面后台数据
实现无跳转发送表单数据.文件,并能接收后台返回的数据. 主要技术要点: 1.form表单添加target属性,指定一个iframme的name:form表单提交后在iframe内嵌窗口接受响应,主页面 ...
- yaha分词
yaha分词:https://github.com/jannson/yaha
- Shiro(4)默认鉴权与自定义鉴权
=========默认鉴权======== 过滤链中定义: <!-- 过滤链定义 --> <property name="filterChainDefinitions&qu ...
- 解决 java.lang.ClassNotFoundException配置文件出错的问题
出现的原因: 1.jar包没有导入 2.jar包有冲突 3.jar包没有同步发布到自己项目的lib目录中 解决方案: maven构建工程的方式:项目点击右键 点击 Properties 选择Deplo ...
- automake--关于两个文件configure.in和Makefile.am的编写
http://blog.csdn.net/shanzhizi/article/details/30251763 automake主要通过编辑Makefile.am来控制它的行为,下面就常用的三个Mak ...
- 利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露
转载:http://blog.csdn.net/wanghuiqi2008/article/details/50724676 一.开发环境: 操作系统:ubuntu 14.04 IDE:Eclipse ...
- git使用中的一些问题
ubuntu14.04中从服务器下代码出错如下: yingc@yingc:/media/sf_yingc/work/gitcode/androidtv$ repo sync boxThe authen ...