python批量修改xml内容和属性

0 提前修改minidom.py 去除

这是最方便的方法
python批量修改xml内容和属性_第1张图片
原因是
在这里插入图片描述
python批量修改xml内容和属性_第2张图片
所以可以修改minidom.py 这是最方便的方法
在这里插入图片描述
这样就没有版本信息了

1修改xml的filename(按照文件名)还有其他属性

import os
import os.path
import xml.dom.minidom
path = "E:\\VOCdevkit\\VOC2012\\Annotations"
files = os.listdir(path)  # 得到文件夹下所有文件名称
s = []
count = 0
for xmlFile in files:  # 遍历文件夹
    if not os.path.isdir(xmlFile):  # 判断是否是文件夹,不是文件夹才打开
            name1 = xmlFile.split('.')[0]
            dom = xml.dom.minidom.parse(path + '\\' + xmlFile)
            root = dom.documentElement
            newfolder = root.getElementsByTagName('folder')
            newpath = root.getElementsByTagName('path')
            newfilename = root.getElementsByTagName('filename')
         #   newfolder[0].firstChild.data = 'VOCdevkit\VOC2012\JPEGImages'
     #       newpath[0].firstChild.data = 'VOCdevkit\VOC2012\JPEGImages' + '\\' + name1 + '.jpg'
            newfilename[0].firstChild.data = name1 + '.jpg'
            with open(os.path.join(path, xmlFile), 'w') as fh:
                dom.writexml(fh)
                print('写入name/pose OK!')
            count = count + 1


2更改xml文件path

python批量修改xml内容和属性_第3张图片
修改为
在这里插入图片描述
在spyder3里面输入

# -*- coding: utf-8 -*-
"""
Created on Sat Mar 16 10:25:40 2019

@author: w
"""


import os
import os.path
import xml.dom.minidom
 
path="C:/dl/1-4967-error-xml/test/"
files=os.listdir(path)  #得到文件夹下所有文件名称
s=[]
for xmlFile in files: #遍历文件夹
    if not os.path.isdir(xmlFile): #判断是否是文件夹,不是文件夹才打开
        print(xmlFile)
 
	#TODO
	#xml文件读取操作
 
	#将获取的xml文件名送入到dom解析
        dom=xml.dom.minidom.parse(os.path.join(path,xmlFile))  #最核心的部分,路径拼接,输入的是具体路径
        root=dom.documentElement
        #获取标签对name/pose之间的值
        name=root.getElementsByTagName('folder')
        pose=root.getElementsByTagName('path')
        #原始信息
        print ('原始信息')
        n0=name[0]
        print( n0.firstChild.data)
 
        p0=pose[0]
        print( p0.firstChild.data)
	
	#修改
        n0.firstChild.data='images1'
        p0.firstChild.data='C:/dl/'
	#打印输出
        print('修改后的 name')
        print( n0.firstChild.data)
 
        print( '修改后的 pose')
        print( p0.firstChild.data)
        print( '~~~~~')
        with open(os.path.join(path,xmlFile),'w') as fh:
            dom.writexml(fh)
            print('写入name/pose OK!')

就可以实现
python批量修改xml内容和属性_第4张图片
非常好用

4 其他去除版本信息的方法

也可以生成一个脚本来修改
下载Git_v2.21.0.zip 安装
在一个文件夹中创建一个mkdir.sh
在这里插入图片描述
使用notepad++打开

#!/bin/sh


cd 'C:/dl/1-4967-error-xml/test/'

for file in `ls C:/dl/1-4967-error-xml/test/`
do 
echo $file
sed -i '//s///g' $file
done

echo 'all is ok.'

这样也可以去除版本信息

对于另外一种情况

在这里插入图片描述



	noglass-rename2

使用git
这是git的命令大全
https://www.runoob.com/linux/linux-comm-sed.html
修改
mkdir.sh

#!/bin/sh


cd 'C:/Users/Administrator/Desktop/xml/xml1/'

for file in `ls C:/Users/Administrator/Desktop/xml/xml1/`
do 
echo $file
sed  -i '1d'  $file
done

echo 'all is ok.'

能够删除第一行。
在这里插入图片描述
使用删除的方法不涉及格式转换的问题,,而且还能自动改为这个格式(unix)!

但是还存存在一下问题

去除烦人的以后发现还有一个问题
使用notepad++打开0001.xml
原来
在这里插入图片描述
新生成的0001.xml

在这里插入图片描述
Unix(LF)和Windows(CR LF)区别
通过查找资料得知Unix(LF)和Windows(CR LF)区别如下:

python批量修改xml内容和属性_第5张图片
python批量修改xml内容和属性_第6张图片
在一个平台上使用另一种换行符的文件可能会带来意想不到的问题, 特别是在编辑程序代码时,有时候代码在编辑器中显示正常, 但在编辑时却会因为换行符问题而出错。

一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾会多车一个^M字符。

修改方法 下载
换行符批量转换工具
https://download.csdn.net/download/qq542731976/9958424

python批量修改xml内容和属性_第7张图片
实现转换

批量修改XML中的标签值 eye-open

# -*- coding: utf-8 -*-
"""
Created on Wed Jul 17 08:24:33 2019

@author: Administrator
"""


import os
import os.path
from xml.etree.ElementTree import parse, Element
#批量修改xml中内容
def test():
    path = "C:\\Users\\Administrator\\Desktop\\xml"  #xml文件所在的目录
    files = os.listdir(path)  # 得到文件夹下所有文件名称
    s = []
    for xmlFile in files:  # 遍历文件夹
        if not os.path.isdir(xmlFile):  # 判断是否是文件夹,不是文件夹才打开
            print
            xmlFile
            pass
        path = "C:\\Users\\Administrator\\Desktop\\xml"
        print(xmlFile)
        path1 = "C:\\Users\\Administrator\\Desktop\\xml"+xmlFile#定位当前处理的文件的路径
        newStr = os.path.join(path, xmlFile)
        name = "eye-open"
        dom = parse(newStr)  ###最核心的部分,路径拼接,输入的是具体路径
        root = dom.getroot()
        print(root)
        for obj in root.iter('object'):#获取object节点中的name子节点
            obj.find('name').text=name
            name1 = obj.find('name').text#修改
            print(name1)
        dom.write(path1, xml_declaration=True)#保存到指定文件
        pass
if __name__ == '__main__':
    test()

你可能感兴趣的:(目标识别-ubuntu,tenseflow)