python批量修改文本内容_python批量修改xml

今天偶然需要修改一下Imglabel生成的xml说明文档。

xml内容大体如下:

train

img0000.jpg

E:/Project_dir/yolo_v2/darknet/build/darknet/x64/img/img0000.jpg

Unknown

269

187

3

0

butterfly

Unspecified

0

0

42

66

228

151

我需要对其中的标签里面的内容更改一下,于是想着使用python脚本来批量改一下,毕竟xml文档数目有些多。

这其中踩了不少的坑,在此记录一下。

首先我按照

#修改

n0.firstChild.data='circle'

p0.firstChild.data='ok'

其中先抛开python2与python3的区别不说,这个不是什么大问题,可是当我执行完xml文档居然一点改动都没有!why?

后进行了一番其他尝试后,找到了这个

>>> from xml.etree.ElementTree import parse, Element

>>> doc = parse('pred.xml')

>>> root = doc.getroot()

>>> root

>>> # Remove a few elements

>>> root.remove(root.find('sri'))

>>> root.remove(root.find('cr'))

>>> # Insert a new element after ...

>>> root.getchildren().index(root.find('nm'))

1

>>> e = Element('spam')

>>> e.text = 'This is a test'

>>> root.insert(2, e)

>>> # Write back to a file

>>> doc.write('newpred.xml', xml_declaration=True)

>>>

大致懂了,按照这个再来一下,结果发现xml还是没动。

反省一下,为什么没有改动,说明是不是我没有写入磁盘,再去看看,应该是这个问题,改完后再跑,bingo!成功!

代码如下:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import os

import os.path

from xml.etree.ElementTree import parse, Element

def test():

path="E:/Project_dir/yolo_v2/darknet/build/darknet/x64/xml/"

files=os.listdir(path) #得到文件夹下所有文件名称

s=[]

for xmlFile in files: #遍历文件夹

if not os.path.isdir(xmlFile): #判断是否是文件夹,不是文件夹才打开

print xmlFile

pass

path="E:/Project_dir/yolo_v2/darknet/build/darknet/x64/xml/"

newStr=os.path.join(path,xmlFile)

dom=parse(newStr) ###最核心的部分,路径拼接,输入的是具体路径

root=dom.getroot()

#print root

part=xmlFile[0:7]

part1=part+'.jpg'

newStr1='E:/Project_dir/yolo_v2/darknet/build/darknet/x64/img/'+part1

#root.remove(root.find('path'))

#e=Element('path')

#print root.find('path').text

root.find('path').text=newStr1

#print newStr

#path[0]=newStr

#n1[0:57]="E:/Project_dir/yolo_v2/darknet/build/darknet/x64/img/"

# p0.firstChild.data='ok'

# #打印输出

print 'path after change'

#print n0.firstChild.data

# print '修改后的 pose'

# print p0.firstChild.data

# print '~~~~~'

dom.write(newStr, xml_declaration=True)

pass

if __name__=='__main__':

test()

有很多注释的语句,基本没用,懒得删了,就这样吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值