利用Python批处理xml文件

使用python对xml文件进行批处理,统一修改xml文件里的path标签。

由于笔者对python不是很熟,中间遇到了很多问题,在这里把经验分享给大家。
主要参考的博客是https://blog.csdn.net/yourgreatfather/article/details/83996031,非常感谢这位博主,给了我很多启发。
1.什么是xml文件?
XML 指可扩展标记语言(eXtensible Markup Language),被设计用来传输和存储数据。XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
2.使用python如何对xml进行处理?
常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。
Python 有三种方法解析 XML,SAX,DOM,以及 ElementTree:
(1)SAX (simple API for XML )
Python 标准库包含 SAX 解析器,SAX 用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
(2)DOM(Document Object Model)
将 XML 数据在内存中解析成一个树,通过对树的操作来操作XML。
(3)ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
笔者在脚本中使用的就是DOM包。
DOM:文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
实际上笔者使用的只是xml.dom.minidom,它是文档对象模型接口的最小实现,具有与其他语言类似的API,在比完整的DOM更简单,并且也明显更小。
在这里我贴出代码,配合注释进行一下梳理。

这是python代码

import os  
import os.path  
import xml.dom.minidom  
#导包,没什么可说的      
filepath="./"  
files=os.listdir(filepath)  #得到文件夹下所有文件名称  
 #要确定一下xml文件的路径
for xmlFile in files: #遍历文件夹  
	if not os.path.isdir(xmlFile): #判断是否是文件夹,不是文件夹才打开  
		 print(xmlFile) #输出xml文件名
		 dom=xml.dom.minidom.parse(os.path.join(filepath,xmlFile))
		 #这行代码比较关键,parse用于打开xml文件,但是在这里不能直接传入文件名,否则会报错
		 #这里是把路径和xml文件名做了一个拼接,这样就没问题
		 root=dom.documentElement   #获得xml文件里的所有节点信息
		 path=root.getElementsByTagName('path')  #通过标签名得到标签里的内容,这里是获得了文件里的path,即<path>C:/xxx/0.jpg</path>
		###原始信息
		 print('原始信息')
		 path0 = path[0] #getElementsByTagName()返回带有指定名称的所有元素的 NodeList,因此要通过下标获取指定的path,这里是0,因为只有一个
		 print (path0.firstChild.data) #这是指定节点的第一个子节点的原始数据(未修改)
		 filename=xmlFile.split('.')
		 path0.firstChild.data='/xxxxx/data/Img/'+filename[0]+'.jpg'#这两行代码应该不难理解,就是获取路径并进行更新
		#打印输出(修改后)
		 print(path0.firstChild.data)
		 print ('##################')
		 with open(os.path.join(filepath,xmlFile),'w',encoding='UTF-8') as fh: 
		 #使用open函数写入xml文件,要注意后面两个参数,标识符'w'表示写入文本文件,一定要指定编码格式,否则会出现乱码和bug!
		 	dom.writexml(fh)
		 	#一个xml文件更改完毕
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值