python 遍历目录生成xml_[python小记]使用lxml修改xml文件,并遍历目录

这次的目的是遍历目录,把目标文件及相应的目录信息更新到xml文件中。在经过痛苦的摸索之后,从python自带的ElementTree投奔向了lxml。而弃用自带的ElementTree的原因就是,namespace。

XML命名空间

作用是为避免元素命名冲突,当出现命名冲突的时候,可以使用前缀来避免命名冲突,就如:

App Store

Google Play

使用命名空间(Namespaces):

African Coffee Table

80

120

添加的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可以这样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:

defgetNode(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的节点

[]

谓语

例子:

1 tree.xpath("//Folder[@Include]")2 #选取带Include属性的Folder节点

3 tree.xpath("//ItemGroup[./Folder]")

4 tree.xpath("//ItemGroup[Folder]")5 #选取含有Folder子节点的ItemGroup节点

遍历目录:

遍历目录有两个方法:os.list_dir与os.walk。各自的用例:

1 importos2

3 deflist_dir(rootDir):4 for lists inos.listdir(rootDir):5 path =os.path.join(rootDir, lists)6 print(path)7 ifos.path.isdir(path):8 list_dir(path)9

10 defwalk(rootDir):11 for root, dirs, files inos.walk(rootDir):12 for d indirs:13 print(os.path.join(root, d))14 for f infiles:15 print(os.path.join(root, f))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值