[python小记]使用lxml修改xml文件,并遍历目录
2016-03-06 16:20
591 查看
这次的目的是遍历目录,把目标文件及相应的目录信息更新到xml文件中。在经过痛苦的摸索之后,从python自带的ElementTree投奔向了lxml。而弃用自带的ElementTree的原因就是,namespace。
使用命名空间(Namespaces):
添加的xmlns属性,就会前缀赋予了一个与某个命名空间相关联的限定名称
安装setuptools: Windows(Powershell3)输入
下载lxml.whl,根据python版本选择合适的whl下载:地址
安装wheel
安装下载好的whl文件
使用lxml可以这样import:
导入并解析xml文件:
获取xml的命名空间:
如果xml文件使用的默认命名空间:
要查找某节点,使用到xpath:
添加子节点:
最后写入到xml文件中:
例子:
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 ConfigParser 参数化配置 学习笔记
- eventlet引发的学习-python:单线程、多线程在IO两方面的性能对比
- Python的基础函数
- Python 2.7.11 字符串操作
- python库
- Python之常用模块(一)
- python学习笔记-Day6(3)
- 四则运算 Python
- Python:使用模块和安装模块:
- (已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二
- 计算图像相似度——《Python也可以》之一
- python小练习
- 分享一套 python 试题
- Python学习笔记-列表的条件过滤生成
- Python的冷技巧小技巧
- Python—Socket
- Python学习笔记-复杂表达式
- libxml2 3.5交叉编译
- 用Python做图像处理
- python常用小模块使用汇总