2024年Python最全【学习笔记】使用python批量读取并修改xml文件_firstchild(1),android快手面试

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

#coding=utf-8
import xml.dom.minidom

###读取单个xml文件
dom=xml.dom.minidom.parse(‘A0000005.xml’)

root=dom.documentElement

###获取标签对xmin/ymin之间的值
xmin=root.getElementsByTagName(‘xmin’)
ymin=root.getElementsByTagName(‘ymin’)

###原始信息
print(‘原始信息’)

xi0 = xmin[0]
print xi0.firstChild.data

~ b = unicode.encode(xi0.firstChild.data)

~ yi0 = ymin[0]

~ print yi0.firstChild.data

###修改标签对之间的信息
###疑问?如何将xi0.firstChild.data数据转为int变量?
###如何让该式直接可以运算xi0.firstChild.data=xi0.firstChild.data/2
xi0.firstChild.data=200

~ xi0.firstChild.data=int(b)/100

yi0.firstChild.data=60

#打印输出(修改后)
print xi0.firstChild.data
print yi0.firstChild.data


先贴代码,python中针对xml文件使用xml.dom.minidom包。基本按照注释就可以理解代码了。理解代码后,我产生了一个想法,那就是我们是否可以在大孩.数据(咳咳,估计恶意机翻一波),就是firstChild.data赋值替换语句中,我们针对不同的图片是否可以直接读取它的值,并除一个相同的比例呢?立刻按照想法实践后发现,firstChild.data返回的数据格式是unicode格式,我们需要int与int格式之间进行运算。


于是,请注意这一句:



b = unicode.encode(xi0.firstChild.data)


我们将纯数字的unicode格式转换为str格式,再使用简单的int()函数将str格式转换为int格式。



b = unicode.encode(xi0.firstChild.data)


便实现了我们“一劳永逸”针对单个xml文件的读取与修改(修改结果并未保存在xml文件中)。


#### 3.遍历xml文件


完成了对单一xml文件的读取与修改,我们如何遍历所有的xml文件呢?首先我们先实现遍历文件夹中的所有文件(是的,下面的代码会遍历同一文件夹中所有格式的文件……好在数据集中xml文件都是单独存放)



#coding=utf-8
import os
import os.path

import xml.dom.minidom

path=“/home/×××××/SSD-Tensorflow/VOC2007/Annotations/”
files=os.listdir(path) #得到文件夹下所有文件名称

for xmlFile in files: #遍历文件夹
if not os.path.isdir(xmlFile): #判断是否是文件夹,不是文件夹才打开
print xmlFile

#遍历指定路径下的文件


代码运行效果如下图所示:


![](https://img-blog.csdnimg.cn/20181113092848910.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lvdXJncmVhdGZhdGhlcg==,size_16,color_FFFFFF,t_70)


在实现了这个功能后,原博主的思想是将遍历代码和修改单个xml文件代码进行融合,融合后的代码为:



#coding:utf-8
import os
import os.path
import xml.dom.minidom

#path=“…/xml/”
path=‘/home/kanghao/learning_something/about_xml/xml/’
files=os.listdir(path) #得到文件夹下所有文件名称
s=[]
for xmlFile in files: #遍历文件夹
if not os.path.isdir(xmlFile): #判断是否是文件夹,不是文件夹才打开
print xmlFile

	#xml读取操作
	
	#将获取到的xml文件名送入到dom解析
	#错误代码:dom=xml.dom.minidom.parse(xmlFile)
	dom=xml.dom.minidom.parse(xmlFile)   ####错误出现在这里
            ###dom=xml.dom.minidom.parse(os.path.join(path,xmlFile)) #拼接地址,将每个具体的.xml文件带入
	root=dom.documentElement
	
	###获取标签对xmin/ymin之间的值
	xmin=root.getElementsByTagName('xmin')
	ymin=root.getElementsByTagName('ymin')

	###原始信息
	print('原始信息')

	xi0 = xmin[0]
	print xi0.firstChild.data
	a= xi0.firstChild.data
	print(type(a))
	yi0 = ymin[0]
	print yi0.firstChild.data

	###修改标签对之间的信息
	###疑问?如何将xi0.firstChild.data数据转为int变量?
	###如何让该式直接可以运算xi0.firstChild.data=xi0.firstChild.data/2
	###下面这个方法可以将纯数字的unicod格式转换为str格式
	# ~ b = unicode.encode(xi0.firstChild.data)
	# ~ print(b)
	# ~ print(type(b))
	xi0.firstChild.data=100
	yi0.firstChild.data=60

	#打印输出(修改后)
	print xi0.firstChild.data
	print yi0.firstChild.data
	print '##################'

注意看标注了“#错误出现在这里的”那句语句,对比读取单个xml的代码,我的理解是这里虽然读取到了xml文件,但是传入



dom=xml.dom.minidom.parse(xmlFile)


这句时仅仅传入了一个文件名称,并没有具体地址所在地。所以会报错:


![](https://img-blog.csdnimg.cn/20181113094126101.png)


报错图片来自[这里]( )。因此,原作者使用了python中的地址拼接,即将文件地址和文件名同时传入。 也就是



###dom=xml.dom.minidom.parse(os.path.join(path,xmlFile)) #拼接地址,将每个具体的.xml文件带入


这一句,在执行代码后,输出结果如下:


![](https://img-blog.csdnimg.cn/20181113094545205.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lvdXJncmVhdGZhdGhlcg==,size_16,color_FFFFFF,t_70)


至此,我们完成了**遍历文件夹中的xml文件,读取标签值,并将读取到的标签值替换为我们需要的值**。然而,一个很重要的问题就是,现在只是读取标签值,赋新值并打印显示,可是**最后修改的结果并未保存在xml文件中**。接下来,我们就要将我们修改的结果保存在xml文件中。


#### 4.批量读取xml文件修改并保存


现在,我们实现刚才没有保存修改结果到xml文件中的功能,主要代码如下:



	#保存修改到xml文件中
	with open(os.path.join(path,xmlFile),'w') as fh:
		dom.writexml(fh)
		print('恭喜,写入xmin/ymin成功!')

整体代码为:



#coding:utf-8
import os
import os.path
import xml.dom.minidom

#path=“…/xml/”
path=‘/home/kanghao/learning_something/about_xml/xml/’
files=os.listdir(path) #得到文件夹下所有文件名称

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值