精华内容
下载资源
问答
  • python批量修改xml文件内容

    千次阅读 2020-07-06 12:53:32
    修改前的xml文件 aachen_000000_000019_leftImg8bit.xml 在这里插入代码片 #python import xml.etree.ElementTree as ET import numpy as np import os '''由于cityperson行人数据集图片较大,将图片裁剪成4份,...

    由于cityperson数据集图片较大,因此将图片裁剪成4份,同时对应修改标注信息

    链接: cityperson图片裁剪.

    修改前的xml文件 aachen_000000_000019_leftImg8bit.xml
    在这里插入图片描述

     #python
    import xml.etree.ElementTree as ET
    import numpy as np
    import os
    '''由于cityperson行人数据集图片较大,将图片裁剪成4份,同时对应修改标注信息其中左下裁剪图片代码如下,其他位置对应修改裁剪坐标即可,同时修改标注信息。'''
    i=1000000
    #批量修改Xml文件#xml文件存放路径/文件夹xml_path=r'F:\cityperson\citypersons2voc-master\cps_dvkt_w10hv50_ignore1\data\Annotations\\'
    filelist = os.listdir(xml_path)#获取所有的.xml文件
    for filename in filelist:    #遍历所有的.xml文件
        tree=ET.parse(xml_path + filename)#打开文件    #objs=tree.findall('object')    
        root = tree.getroot()    
        for wid in root.findall('size'):#查找“size”属性
            wid.find('width').text='1280'#修改width值 
            wid.find('height').text='768'#修改height值    
            #删除不符合要求的bbox框    
        for obj in root.findall('object'):        
        #print(obj)        
            bbox=obj.find('bndbox')        
            #print(bbox)        
            #获取bbox坐标信息
            x1=float(bbox.find('xmin').text)-1
            y1=float(bbox.find('ymin').text)-1
            x2=float(bbox.find('xmax').text)-1
            y2=float(bbox.find('ymax').text)-1
            if x2<=1280 and y2<=768: 
            #由于左下裁剪图片都是从0开始,无需修改标注
               continue        
            else:            
               root.remove(obj)#删除bndbox    
        #另保存XML文件    
        path='F:\cityperson\citypersons2voc-master\cps_dvkt_w10hv50_ignore1\data\Annotations_1'
        savepath=os.path.join(path,str(i)+'.xml')
        tree.write(savepath)    
        i=i+1
    print('完成')

    修改后的xml文件 aachen_000000_000019_leftImg8bit.xml
    在这里插入图片描述

    展开全文
  • 批量修改xml文件中的标签属性 """ 批量修改xml文件中的标签属性 对folder,filename和path内容进行修改,并同时去除文件名中的中文汉字 """ import re import os import xml.etree.ElementTree as ET def change_xml...
  • 批量修改xml文件中指定位置内容 我要修改图片的绝对路径 #!/usr/bin/python ''' 此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。 ''' import os #文件操作相关 import xml.etree.ElementTree ...

    批量修改xml文件中指定位置内容
    我要修改图片的绝对路径
    在这里插入图片描述
    在这里插入图片描述

    #!/usr/bin/python
    '''
    此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。
    
    '''
    import os       #文件操作相关
    import xml.etree.ElementTree as ET  #xml文件操作相关
    
    """  "*******************************************************************************************
    *函数功能 :
    
    *输入参数 :输入裁剪后图像,
    *返 回 值 :无
    *编写时间 : 2021.7.12
    *作    者 : diyun
    ********************************************************************************************"""
    # 批量修改整个文件夹所有的xml文件
    def change_all_xml(xmlfilepath,string1):
        total_xml = os.listdir(xmlfilepath)  # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。
    
        num = len(total_xml)  # xml文件个数
        print(num)
        print(total_xml[0])
        for xmlfile in total_xml:
            #print(xml_id)
            in_file = open('%s/%s' % (xmlfilepath, xmlfile),encoding = 'UTF-8')
            #print(in_file)
    
            tree = ET.parse(in_file)
            #print(tree)
            root = tree.getroot()
            #print(root)
            obj = root.find('path')  # 找到filename标签,
            #print(obj)
            path_text = obj.text
            #print(path_text)
            end = "\\"
            string2 = path_text[path_text.rfind(end):]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
            #print(string2)
            path_text_1=string1+string2
            #print("path_text_1:",path_text_1)
            obj.text = path_text_1  # 修改标签内容
            tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改
    
    
    xmlfilepath = 'helmet_xml'  # xml文件保存地址
    # 要修改的内容
    string1='E:\\1_Training_picture\\6_helmet\\helmet_train'
    
    change_all_xml(xmlfilepath,string1)
    print("ok")
    

    2、修改path和filename

    #!/usr/bin/python
    '''
    此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。
    
    '''
    import os       #文件操作相关
    import xml.etree.ElementTree as ET  #xml文件操作相关
    
    """  "*******************************************************************************************
    *函数功能 :
    
    *输入参数 :输入裁剪后图像,
    *返 回 值 :无
    *编写时间 : 2021.7.12
    *作    者 : diyun
    ********************************************************************************************"""
    # 批量修改整个文件夹所有的xml文件
    def change_all_xml(xmlfilepath,string1):
        total_xml = os.listdir(xmlfilepath)  # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。
    
        num = len(total_xml)  # xml文件个数
        print(num)
        print(total_xml[0])
        for xmlfile in total_xml:
            #print("**********************************************************************************************************")
            #print(xmlfile)
            in_file = open('%s/%s' % (xmlfilepath, xmlfile),encoding = 'UTF-8')
            #print(in_file)
    
            tree = ET.parse(in_file)
            #print(tree)
            root = tree.getroot()
            #print(root)
            obj = root.find('path')  # 找到filename标签,
            #print(obj)
            path_text = obj.text
            #print(path_text)
            #end = "."
            end = "."
            string3 = path_text[path_text.rfind(end):]  # 在strint1中查找最后一个反斜杠\后面的字符,图片名称
            #print("string3:", string3)
            end = "."
            #string4 = string3[string3.rfind(end):]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
            #print("string4:", string4)
    
            #print("xmlfile:", xmlfile)
            #print("string1:", string1)
            end = "."
            string2 = xmlfile[:xmlfile.rfind(end)]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
            #print("string2:", string2)
            path_text_1 = string1 + string2+string3
            #print("path_text_1:",path_text_1)
            obj.text = path_text_1  # 修改标签内容
            #tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改
            obj_2 = root.find('filename')  # 找到filename标签
            #print("obj_2:", obj_2)
            path_text_2= string2+string3
            #print("path_text_2:", path_text_2)
            obj_2.text = path_text_2  # 修改标签内容
            tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改
    
    #xmlfilepath = 'temp'  # xml文件保存地址
    xmlfilepath = 'helmet_xml'  # xml文件保存地址
    # 要修改的内容
    string1='E:\\1_Training_picture\\6_helmet\\helmet_train\\'
    
    change_all_xml(xmlfilepath,string1)
    print("ok")
    

    最终版本

    #!/usr/bin/python
    '''
    此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。
    
    '''
    import os       #文件操作相关
    import xml.etree.ElementTree as ET  #xml文件操作相关
    import cv2
    #PRINT_FLAG=True
    PRINT_FLAG=False
    
    """  "*******************************************************************************************
    *函数功能 :
    
    *输入参数 :输入裁剪后图像,
    *返 回 值 :无
    *编写时间 : 2021.7.12
    *作    者 : diyun
    ********************************************************************************************"""
    # 批量修改整个文件夹所有的xml文件
    def change_all_xml(xmlfilepath,string1):
        total_xml = os.listdir(xmlfilepath)  # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。
    
        num = len(total_xml)  # xml文件个数
        print(num)
        print(total_xml[0])
        for xmlfile in total_xml:
            #print("**********************************************************************************************************")
            #print(xmlfile)
            in_file = open('%s/%s' % (xmlfilepath, xmlfile),encoding = 'UTF-8')
            #print(in_file)
    
            tree = ET.parse(in_file)
            #print(tree)
            root = tree.getroot()
            #print(root)
            obj = root.find('path')  # 找到filename标签,
            #print(obj)
            path_text = obj.text
            #print(path_text)
            #end = "."
            end = "."
            string3 = path_text[path_text.rfind(end):]  # 在strint1中查找最后一个反斜杠\后面的字符,图片名称
            #print("string3:", string3)
            end = "."
            #string4 = string3[string3.rfind(end):]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
            #print("string4:", string4)
    
            #print("xmlfile:", xmlfile)
            #print("string1:", string1)
            end = "."
            string2 = xmlfile[:xmlfile.rfind(end)]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
            #print("string2:", string2)
            path_text_1 = string1 + string2+string3
            try:
                #print("path_text_1:", path_text_1)
                image = cv2.imread(path_text_1,1)
                image.shape
                #cv2.imshow("aa",image)
                #cv2.waitKey(2000)
    
                #print('Open image ok! ')
            except:
                print('1111:Open image Error! Try again!')
                print("path_text_1:", path_text_1)
                string3='.jpg'
                path_text_1 = string1 + string2 + string3
                print("path_text_1:", path_text_1)
                try:
                    #print("path_text_1:", path_text_1)
                    image = cv2.imread(path_text_1, 1)
                    image.shape
                    #cv2.imshow("aa",image)
                    #cv2.waitKey(2000)
                    print('Open image ok! ')
                    print('*****************************************************************************')
                except:
                    print('222 : Open image Error! Try again!')
                    string3=".jpg"
                    path_text_1 = string1 + string2 + string3
                    print("path_text_1:", path_text_1)
    
            #print("path_text_1:",path_text_1)
            obj.text = path_text_1  # 修改标签内容
            #tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改
            obj_2 = root.find('filename')  # 找到filename标签
            #
            path_text_2= string2+string3
            #
            obj_2.text = path_text_2  # 修改标签内容
            if PRINT_FLAG==True:
                print("string1:", string1)
                print("string2:", string2)
                print("string3:", string3)
                print("path_text_1:", path_text_1)
                print("obj_2:", obj_2)
                print("path_text_2:", path_text_2)
            tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改
    
    #xmlfilepath = 'temp'  # xml文件保存地址
    xmlfilepath = 'helmet_xml'  # xml文件保存地址
    # 要修改的内容
    string1='E:\\1_Training_picture\\6_helmet\\helmet_train\\'
    
    change_all_xml(xmlfilepath,string1)
    print("ok")
    
    展开全文
  • 在做检测时,下载的数据集中Annotations里的.xml文件的“path”值需要修为自己的图片保存地址,如下: 下面为下载后的原始 01017.jpg C:\Users\Administrator\Desktop\labellmg\图片标注\待标注图片\01017.jpg 需要...
  • 批量改写xml文件内容

    2020-01-06 13:40:04
    xml.etree.ElementTree模块实现了一个简单而高效的API用于解析和创建XML数据。实际上,xml.etree.ElementTree可以用于处理任何树结构的数据,但最常用于处理XML文档。 1、导入ET 两种导入方式: ①importxml....

    代码略

    xml.etree.ElementTree(简称ET)

    xml.etree.ElementTree模块实现了一个简单而高效的API用于解析和创建XML数据。实际上,xml.etree.ElementTree可以用于处理任何树结构的数据,但最常用于处理XML文档。

    1、导入ET

    两种导入方式:

    ①import xml.etree.ElementTree

    ②import xml.etree.cElementTree(速度更快一点)

    如果不确定环境中是否有cElementTree,可以使用如下方式导入:

    try: 
        import xml.etree.cElementTree as ET
    except ImportError:
        import xml.etree.ElementTree as ET

    2、解析XML

    有两种方式可以解析XML文件:

    ①从文件中解析XML文件

    import xml.etree.cElementTree as ET
    
    tree = ET.ElementTree(file = 'xml路径')
    root = tree.getroot() #获取根节点
    
    import xml.etree.ElementTree as ET
    
    tree = ET.parse('xml文件路径')
    root = tree.getroot() #获取根节点
    
    
    #或者
    tree = ET.ElementTree()
    tree.parse('xml文件路径')
    root = tree.getroot()
    import xml.etree.ElementTree as ET
    
    data = open('xml文件路径').read()
    root = ET.fromstring(data)

    read()读取文件中所有的内容,并将其作为一个字符串输出。

    fromstring()函数将字符串转换为一个Element,解析树的根节点。

    3、

    节点.tag——节点名

    节点.attrib——节点属性

    节点.get('属性名字')——查找相符的节点属性

    节点.text——节点文本

    节点.tail——节点附加文本

    节点[:]——子节点列表

    len(节点)——统计子节点个数

    4、

    节点.findall('子节点名字')——(非递归)查找节点下所有相符的子节点,返回列表

    节点.iter('子节点名字')——(递归)查找所有相符的子节点,返回列表

    节点.find('子节点名字')——查找节点下第一个相符的子节点

    节点.findtext('子节点名字')——查找节点下第一个相符的字节点并返回其text值

    5、通过下标直接访问节点

    root[0][1]:根节点下的第一个节点下的第二个节点

    6、tree.write()写出xml文本

     

     

    展开全文
  • XMLPatch 是一个简单的工具,用来批量的修改 XML 文件,它使用 patch 文件的形式,包含要改动的内容,然后批量的应用到指定的 XML 文件,完成批量修改过程。 标签:XMLPatch
  • 本文针对批量修改代码进行记录,很简单,删掉了针对项目的主要内容。 导入文件 首先将文件夹中的所有文件存到数字中: def file_list(path): # 传入存储的list f_list = os.listdir(path) # 将文件按首字母进行...

    最近处理一些数据量小的内容,太喜欢用python了,语法简单,随便写一写都不容易出错,对不要求实时性的的内容就很友好,真香。
    本文针对批量修改代码进行记录,很简单,删掉了针对项目的主要内容。

    导入文件

    首先将文件夹中的所有文件存到数字中:

    def file_list(path):  # 传入存储的list
        f_list = os.listdir(path)
        # 将文件按首字母进行排序
        f_list.sort()
        return f_list
    

    需要将文件夹数组加上一个路径,这样才能读取到文件中的信息:

    # 将生成 xml 命名 (路径+文件名)
    def get_pathname(filename):
    	# file_path为导入filename的路径
        filename = file_path + filename
        return filename
    

    修改xml文件内容

    修改内容需要先在文件中找到你要修改的内容位置。

    打开文件语句:

    # 打开path文件夹中的xml文件
    all_file = file_list(path)
    # 解析成dom
    dom = xml.dom.minidom.parse(get_pathname(all_file[i]))
    

    xml代码片段内容如下:

    <TrafficControl>
    	<Player>
    		<Description Driver="DefaultDriver" Control="external" AdaptDriverToVehicleType="true" Type="AlfaRomeo_Brera_10_BiancoSpino" Name="HV"/>
    		<Init>
    			<Speed Value="2.7777777777777777e+00"/>
    			<PosRoute/>
    			<PathRef StartS="0.0000000000000000e+00" EndAction="continue" TargetS="9.4247779607693792e+02" StartLane="-1" PathId="1"/>
    		</Init>
    	</Player>
    </TrafficControl>
    

    需要找到Description的Name属性为"HV"的Player,并将该Player下面的Speed标签属性值更改。

    # 修改speed的value数值
    def change_speed(hv_speed):
        root = dom.documentElement
        # 先找到所有Player标签,放入数组
        player_list = root.getElementsByTagName('Player')
        for player in player_list:
        	# 遍历数组的同时,找到下面的Description标签,因为修改第一个,所以取第一个
            description = player.getElementsByTagName("Description")[0]
            if description.getAttribute("Name") == "HV":
            	# 如果Name为"HV",修改Speed的Value值,否则循环继续
                speed = player.getElementsByTagName("Speed")[0]
                speed.setAttribute('Value', h_speed)
    

    导出文件

    因为批量导出文件,所以可能需要输入的名字有所改变,最后会提到一些在写这个代码遇到的一些语句。

    # 将生成 xml 保存,导入想要取得名字。
    def save_xml(filename):
    	# file_xml_path为文件输出的目标文件夹路径
        fileHandle = open(file_xml_path + filename, 'w')
        dom.writexml(fileHandle, '', '', '', 'UTF-8')
    

    导出文件时命名

    分离文件扩展名

    import os
    print(os.path.splitext('HelloWorld.xml'))
    

    运行结果:

    ('HelloWorld', '.xml')
    

    把原文件名称扩展名清除:

    os.path.splitext(all_file[i])[0]
    

    整型转换十六进制

    1. 将19转换为十六进制
    hex(19)
    
    结果为0x13
    
    1. 去掉前面的0x
    hex(19).replace('0x','')
    
    1. 保持数字为两位
    hex(1).replace('0x','').zfill(2)
    
    不满两位在左侧补0
    
    展开全文
  • #paths文件目录,files保存文件路径以及名字 paths='/home/xiaobumidm/Yolo_mark-master/VOC数据集/VOC/' files=[] oldStr='basstom' newStr='base>custom' for file in os.listdir(paths): if file.endswith('....
  • 问题描述: 对大量xml标签进行修改floder的名字,以及path路径。例如把1修改为train,把路径修改为当前xml所在位置。 xml格式如下: 代码如下:
  • 批量修改xml文件节点信息

    千次阅读 2018-10-31 16:10:27
    如何批量修改指定文件夹下的xml文件的指定属性.分三步走,首先,我们先看看如何读写单个 的xml文件;第二步,来看看如何遍历指定文件夹下的所有文件,获取到所有文件的文件名;第三步,我们来看看一二之间 该如何衔接.好,...
  • 使用 os.listdir( ) 批量读取文件夹下的文件,然后循环相应的xml文件,并使用getElementsByTagName函数修改节点内容。 2.代码如下: import os import xml.dom.minidom import xml.etree.ElementTree xmldir = '...
  • 主要介绍了python批量修改xml属性的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python批量修改xml内容和属性

    千次阅读 2019-03-16 17:46:25
    把原始的xml文件 修改为 # -*- coding: utf-8 -*- &amp;quot;&amp;quot;&amp;quot; Created on Sat Mar 16 10:25:40 2019 @author: w &amp;quot;&amp;quot;&amp;quot; ...
  • 【学习笔记】使用python批量读取并修改xml文件

    万次阅读 多人点赞 2018-11-13 10:05:35
    在大老板的安排下最近在某公司实习,实习期间要求实现一个图像识别模块的封装。无奈基础太薄弱,只能将任务细分,单独学习来实现。以此为背景…… 本篇目标:通过python批量访问并...因此,目前急需实现批量修改...
  • 一、待处理的xml文件内容 <annotation> <folder>JPEGImages</folder> <filename>0037</filename> <path>H:\labelImg-master\windows_v1.2.2\data\voc\VOCde
  • python批量修改xml文件的path和filename

    千次阅读 热门讨论 2019-02-27 16:17:13
    上一篇写了如何批量修改文件名,但是第一次总有像我这种终极小白绕弯路的时候,比如标注前忘记改图片名&amp;在Windows下标注的图片拿到Linux下训练。。。于是乎废了老大力气标注完的xml可能长这样 于是乎又一波...
  • 【目标检测适用】批量修改xml文件中的name字段

    千次阅读 热门讨论 2019-10-27 22:22:03
    前言:使用labelimg进行标注的时候,由于都是用的是默认的名称,有时候类的名字会出现拼写错误,比如我想要写的是“cow” 结果打上去的是“cwo”, 一出错就错一片,这很常见... xml文件展示2. 将文件夹中所有name进...
  • 1. python批量修改文件名(控制文件名的起始编号) import os path = "E:/Project/label/fire/" # 目标路径 filename_list = os.listdir(path) # 扫描目标路径的文件,将文件名存入列表 t = 0 a = 900 # 文件名的...
  • name属性名可以随意更改,如原本未have_mask,现在改为have_mask。 如原来的xml中name属性为: 现在需要将name:have_mask更改为face...#批量修改xml中内容 def test(): path = "D:\label_mask/"#xml文件所在的目录
  • matlab快速处理xml文件

    2019-04-11 13:10:08
    matlab快速处理xml文件,包括读取xml,修改xml,写入xml
  • 主要介绍了使用python批量修改XML文件中图像的depth值,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 基于matlab的XML文件批量处理 maindir = ’ ‘; %引号里面填XML文件所在的文件路径 subdirpath = fullfile( maindir, ‘*.jpg’ );... %将找到的所有XML文件内容传递给img for j = 1 : length(...
  • python批量修改xml文件的属性(filename/path)

    千次阅读 热门讨论 2019-09-22 11:03:12
    一、修改文件路径path属性 这里路径可以自定义,根据自己实际需求更改即可: import xml.dom.minidom ...sv_path = r'F:\Pycharm Community\foods\xml1' # 修改后的xml文件存放路径 files = os....
  • 自己在用labelImg打好标签后,想只用其中几类训练,不想训练全部类别,又不想重新打标生成.xml文件,因此想到这个办法:直接在.xml文件中删除原有的不需要的标签类及其属性。 打标时标签名出现了大小写(工程量大时...
  • from xml.etree.ElementTree import parse, Element out_dir = 'NewAnnotations/' ##这里是保存的目标文件夹 b = os.listdir('Annotations/') for i in b: print(i) dom = parse('Annotations/'+i) roo...
  • 因为项目做数据集,把图片放在以中文名命名的文件夹中,导致进行...4.保存xml文件 # coding:utf-8 import re import os import os.path import xml.dom.minidom # path="../xml/" path = '..\create-dataset\exa..
  • python批量修改xml属性

    万次阅读 2018-01-25 21:48:26
    如何批量修改指定文件夹下的xml文件的指定属性.分三步走,首先,我们先看看如何读写单个 的xml文件;第二步,来看看如何遍历指定文件夹下的所有文件,获取到所有文件的文件名;第三步,我们来看看一二之间 该如何衔接.好,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,592
精华内容 29,436
关键字:

批量修改xml文件内容