精华内容
下载资源
问答
  • python修改xml文件的节点值方法详解发布时间:2020-08-24 06:28:24来源:脚本之家阅读:110这是我的xml文件结构JPEGImagestrain_2018-05-08_1000.jpgD:\all_data\2018-05-08\JPEGImages\train_2018-05-08_1000....

    对python修改xml文件的节点值方法详解

    发布时间:2020-08-24 06:28:24

    来源:脚本之家

    阅读:110

    这是我的xml文件结构

    <?xml version='1.0' encoding='utf-8'?>

    JPEGImages

    train_2018-05-08_1000.jpg

    D:\all_data\2018-05-08\JPEGImages\train_2018-05-08_1000.jpg

    Unknown

    4032

    3024

    3

    0

    yl-ylhzdhmbbz-gz-hm-280g

    Unspecified

    0

    0

    1863

    355

    2512

    902

    hy-hybfbgz-hz-xcw-200ml

    Unspecified

    0

    0

    1076

    1602

    1648

    2105

    ys-zzyspyz-gz-yw-245ml

    Unspecified

    1

    0

    2017

    2475

    2681

    3024

    mn-zgl-hz-cmw-250ml

    Unspecified

    0

    0

    1849

    1207

    2242

    2047

    qc-qckf-pz-shnt-268ml

    Unspecified

    0

    0

    480

    1213

    1308

    1544

    wt-wtcyl-gz-nm-310ml

    Unspecified

    0

    0

    867

    488

    1527

    938

    现在想实现的是修改图像的size和目标

    __author__ = 'Sam'

    import cv2

    import xml.etree.ElementTree as ET

    import os

    import sys

    import lxml

    import shutil

    #user input files path

    path="E:/test_folder"

    image_path = path + "/Annotations/" #image path with .jpg ending

    label_path = path + "/JPEGImages/" #label path with .xml ending

    min_size=800

    def search_jpg_xml(image_dir,label_dir):

    #find out all of sepecified file

    image_ext='.jpg'

    img=[fn for fn in os.listdir(image_dir) if fn.endswith(image_ext)]

    label_ext='.xml'

    label=[fn for fn in os.listdir(label_dir) if fn.endswith(label_ext)]

    return img, label

    def copyfile():

    if "Annotations_temp" in os.listdir(path):

    shutil.rmtree(path+"/Annotations_temp")

    if "JPEGImages_temp" in os.listdir(path):

    shutil.rmtree(path+"/JPEGImages_temp")

    save_annotation_path=path+"/Annotations_temp/"

    save_jpg_path=path+"/JPEGImages_temp/"

    shutil.copytree(path + "/Annotations",save_annotation_path)

    shutil.copytree(path + "/JPEGImages", save_jpg_path)

    return save_jpg_path ,save_annotation_path

    def write_xml_jpg(jpg_path,annotation_path):

    img,label=search_jpg_xml(jpg_path,annotation_path)

    sorted(img)

    sorted(label)

    print(img)

    print(label)

    if "Annotations_1" not in os.listdir(path):

    os.mkdir(path+"/Annotations_1")

    if "JPEGImages_1" not in os.listdir(path):

    os.mkdir(path+"/JPEGImages_1")

    new_image_path=path+"/JPEGImages_1/"

    new_annotation_path=path+"/Annotations_1/"

    for index,file in enumerate(label):

    cur_img = cv2.imread(jpg_path+img[index])

    width=cur_img.shape[1]

    height=cur_img.shape[0]

    if width

    new_width=min_size

    new_height=int(min_size*height/width)

    w_ratio=new_width/width

    h_ratio=new_height/height

    elif width>height:

    new_width=int(min_size*width/height)

    new_height=min_size

    w_ratio=new_width/width

    h_ratio=new_height/height

    elif width==height:

    new_width=min_size

    new_height=min_size

    w_ratio=new_width/width

    h_ratio=new_height/height

    cur_img = cv2.resize(cur_img, (new_width, new_height))

    cv2.imwrite(new_image_path+img[index],cur_img)

    cur_xml = ET.parse(annotation_path+file)

    root = cur_xml.getroot()

    for node in root:

    if node.tag=='size':

    node[0].text=str(new_width)

    node[1].text=str(new_height)

    elif node.tag=='object':

    xmin=int(node[4][0].text)#bbox position

    ymin=int(node[4][1].text)

    xmax=int(node[4][2].text)

    ymax=int(node[4][3].text)

    node[4][0].text=str(int(xmin*w_ratio))

    node[4][1].text=str(int(ymin*h_ratio))

    node[4][2].text=str(int(xmax*w_ratio))

    node[4][3].text=str(int(ymax*h_ratio))

    cur_xml.write(new_annotation_path+file)

    shutil.rmtree(path+"/JPEGImages_temp")

    shutil.rmtree(path+"/Annotations_temp")

    if __name__ == "__main__":

    jpg_path,annotation_path=copyfile()

    write_xml_jpg(jpg_path,annotation_path)

    最关键语句是:

    node[4][3].text=str(int(ymax*h_ratio)),注意xml节点的操作是字符型!!!

    以上这篇对python修改xml文件的节点值方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持亿速云。

    展开全文
  • 今天小编就为大家分享一篇对python修改xml文件的节点值方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • I have this xml model.So I have to add some node (see the text commented) to this file.How I can do it?I have writed this partial code but it doesn't work:xmldoc=minidom.parse(directory)child = xmldoc...

    I have this xml model.

    So I have to add some node (see the text commented) to this file.

    How I can do it?

    I have writed this partial code but it doesn't work:

    xmldoc=minidom.parse(directory)

    child = xmldoc.createElement("map")

    for node in xmldoc.getElementsByTagName("Environment"):

    node.appendChild(child)

    Thanks in advance.

    解决方案

    I downloaded your sample xml file and your code works fine. Your problem is most likely with the line: xmldoc=minidom.parse(directory), should this not be the path to the file you are trying to parse not to a directory? The parse() function parses an XML file it does not automatically parse all the XML files in a given directory.

    If you change your code to something like below this should work fine:

    xmldoc=minidom.parse("directory/model_template.xml")

    child = xmldoc.createElement("map")

    for node in xmldoc.getElementsByTagName("Environment"):

    node.appendChild(child)

    If you then execute the statement: print xmldoc.toxml() you will see that the map element has indeed been added to the Environment element: .

    展开全文
  • 这是我的xml文件结构jpegimagestrain_2018-05-08_1000.jpgd:\all_data\2018-05-08\jpegimages\train_2018-05-08_1000.jpgunknown4032302430yl-ylhzdhmbbz-gz-hm-280gunspecified0018633552512902hy-hybfbgz-hz-xcw-...

    这是我的xml文件结构

    <?xml version='1.0' encoding='utf-8'?>

    jpegimages

    train_2018-05-08_1000.jpg

    d:\all_data\2018-05-08\jpegimages\train_2018-05-08_1000.jpg

    unknown

    4032

    3024

    3

    0

    yl-ylhzdhmbbz-gz-hm-280g

    unspecified

    0

    0

    1863

    355

    2512

    902

    hy-hybfbgz-hz-xcw-200ml

    unspecified

    0

    0

    1076

    1602

    1648

    2105

    ys-zzyspyz-gz-yw-245ml

    unspecified

    1

    0

    2017

    2475

    2681

    3024

    mn-zgl-hz-cmw-250ml

    unspecified

    0

    0

    1849

    1207

    2242

    2047

    qc-qckf-pz-shnt-268ml

    unspecified

    0

    0

    480

    1213

    1308

    1544

    wt-wtcyl-gz-nm-310ml

    unspecified

    0

    0

    867

    488

    1527

    938

    现在想实现的是修改图像的size和目标

    __author__ = 'sam'

    import cv2

    import xml.etree.elementtree as et

    import os

    import sys

    import lxml

    import shutil

    #user input files path

    path="e:/test_folder"

    image_path = path + "/annotations/" #image path with .jpg ending

    label_path = path + "/jpegimages/" #label path with .xml ending

    min_size=800

    def search_jpg_xml(image_dir,label_dir):

    #find out all of sepecified file

    image_ext='.jpg'

    img=[fn for fn in os.listdir(image_dir) if fn.endswith(image_ext)]

    label_ext='.xml'

    label=[fn for fn in os.listdir(label_dir) if fn.endswith(label_ext)]

    return img, label

    def copyfile():

    if "annotations_temp" in os.listdir(path):

    shutil.rmtree(path+"/annotations_temp")

    if "jpegimages_temp" in os.listdir(path):

    shutil.rmtree(path+"/jpegimages_temp")

    save_annotation_path=path+"/annotations_temp/"

    save_jpg_path=path+"/jpegimages_temp/"

    shutil.copytree(path + "/annotations",save_annotation_path)

    shutil.copytree(path + "/jpegimages", save_jpg_path)

    return save_jpg_path ,save_annotation_path

    def write_xml_jpg(jpg_path,annotation_path):

    img,label=search_jpg_xml(jpg_path,annotation_path)

    sorted(img)

    sorted(label)

    print(img)

    print(label)

    if "annotations_1" not in os.listdir(path):

    os.mkdir(path+"/annotations_1")

    if "jpegimages_1" not in os.listdir(path):

    os.mkdir(path+"/jpegimages_1")

    new_image_path=path+"/jpegimages_1/"

    new_annotation_path=path+"/annotations_1/"

    for index,file in enumerate(label):

    cur_img = cv2.imread(jpg_path+img[index])

    width=cur_img.shape[1]

    height=cur_img.shape[0]

    if width

    new_width=min_size

    new_height=int(min_size*height/width)

    w_ratio=new_width/width

    h_ratio=new_height/height

    elif width>height:

    new_width=int(min_size*width/height)

    new_height=min_size

    w_ratio=new_width/width

    h_ratio=new_height/height

    elif width==height:

    new_width=min_size

    new_height=min_size

    w_ratio=new_width/width

    h_ratio=new_height/height

    cur_img = cv2.resize(cur_img, (new_width, new_height))

    cv2.imwrite(new_image_path+img[index],cur_img)

    cur_xml = et.parse(annotation_path+file)

    root = cur_xml.getroot()

    for node in root:

    if node.tag=='size':

    node[0].text=str(new_width)

    node[1].text=str(new_height)

    elif node.tag=='object':

    xmin=int(node[4][0].text)#bbox position

    ymin=int(node[4][1].text)

    xmax=int(node[4][2].text)

    ymax=int(node[4][3].text)

    node[4][0].text=str(int(xmin*w_ratio))

    node[4][1].text=str(int(ymin*h_ratio))

    node[4][2].text=str(int(xmax*w_ratio))

    node[4][3].text=str(int(ymax*h_ratio))

    cur_xml.write(new_annotation_path+file)

    shutil.rmtree(path+"/jpegimages_temp")

    shutil.rmtree(path+"/annotations_temp")

    if __name__ == "__main__":

    jpg_path,annotation_path=copyfile()

    write_xml_jpg(jpg_path,annotation_path)

    最关键语句是:

    node[4][3].text=str(int(ymax*h_ratio)),注意xml节点的操作是字符型!!!

    以上这篇对python修改xml文件的节点值方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    展开全文
  • 今天偶然需要修改一下Imglabel生成的xml说明文档。xml内容大体如下:trainimg0000.jpgE:/Project_dir/yolo_v2/darknet/build/darknet/x64/img/img0000.jpgUnknown26918730butterflyUnspecified004266228151我需要对...

    今天偶然需要修改一下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()

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

    展开全文
  • 这是我的xml文件结构 JPEGImagestrain_2018-05-08_1000.jpgD:\all_data\2018-05-08\JPEGImages\train_2018-05-08_1000.jpgUnknown4032302430yl-ylhzdhmbbz-gz-hm-280gUnspecified0018633552512902hy-hybfbgz-hz-xcw-...
  • 当我们用Python修改xml或者json文件的时候,通常会遇到”UnicodeEncodeError”的问题,百度谷歌的方法千千万,有时候看了一大丢都发现解决不了问题,这里备注两种我试过可行的方法; 1.python修改xml时,在开头加上...
  • 这是我的xml文件结构JPEGImagestrain_2018-05-08_1000.jpgD:\all_data\2018-05-08\JPEGImages\train_2018-05-08_1000.jpgUnknown4032302430yl-ylhzdhmbbz-gz-hm-280gUnspecified0018633552512902hy-hybfbgz-hz-xcw-...
  • 1 文章背景使用labelImg对图片...2 涉及知识点使用python进行xml文件解析,修改指定的标签内容2.1 使用python进行xml文件解析# encoding:utf-8import osimport xml.etree.ElementTree as ETnowDir = os.getcwd() ...
  • 如何批量修改指定文件夹下的xml文件的指定属性.分三步走,首先,我们先看看如何读写单个的xml文件;第二步,来看看如何遍历指定文件夹下的所有文件,获取到所有文件的文件名;第三步,我们来看看一二之间该如何衔接.好,lets...
  • 使用Python修改XML

    2020-12-06 17:10:28
    使用Python的ElementTree(元素树)模块修改XML
  • 如何批量修改指定文件夹下的xml文件的指定属性.分三步走,首先,我们先看看如何读写单个的xml文件;第二步,来看看如何遍历指定文件夹下的所有文件,获取到所有文件的文件名;第三步,我们来看看一二之间该如何衔接.好,lets...
  • from xml.etree.ElementTree import ElementTree,Elementtree=ElementTree()tree.parse('D://myself.xml')#下面主要是在根目录里加一级目录#2得到根目录root=tree.getroot()#创建一级目录element=Element('train',{'...
  • Python修改xml文件中的类别名 参考原文:https://blog.csdn.net/weixin_43384257/article/details/100581673?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-8&utm_source=...
  • 使用python操作XML增删改查什么是XMLXML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输数据,而非显示数据XML 标签没有被预定义。您需要自行定义标签。XML...
  • xmltest.xml内容如下:12017140000xml处理:import xml.tree.ElementTree as ETtree=ET.parse("xmltest.xml")root=tree.getroot() #获取根节点print(root)print(root.tag)#遍历xmlfor child in root:......print...
  • 简单介绍使用Python解析并修改XML文档的方法这篇文章主要介绍了使用Python解析并修改XML文档的方法,是Python入门学习中的基础知识,需要的朋友可以参考下问题你想读取一个XML文档,对它最一些修改,然后将结果写回XML...
  • 场景:[d]python解析xml后,节点的属性顺序发生了变化解决方法[d]python解析xml后,节点的属性顺序发生了变化本帖最后由 fibbery 于 2012-07-11 15:05:14 编辑比如说一个xml文件的节点如下:但是经过解析后,我重新...
  • 有个xml文件的格式大致如下:123abc126abc135abc147abc然后另外一个delete.txt保存的是需要删除的re标签的id。假设txt内容如下:126147需要做的就是读取这个delete.txt文件,然后在xml中找到这些id对应的标签将其...
  • Python 修改xml文件内容——批量更改Labelimg标签文件路文件夹名目的原始文件与想要的结果对比图代码实现xml.etree.ElementTree 目的 对一个文件夹中全部Labelimg标记的xml文件中的文件路径以及文件夹名,使用python...
  • 360截图20191106214044006.jpg (23.15 KB, 下载次数: 0)2019-11-6 21:40 上传CPC采用的数据格式为:doc模板文件(骨架)+xml文件(肉)因此,通过修改XML就可以修改提交文件的内容,这个应用可就广了,什么批量变更啊,...
  • Python修改xml文件内容

    千次阅读 2019-08-26 16:50:43
    在使用xml文件的过程中,发现其中filename的名字有问题,所以找了一个代码修改了这个文件。 参考:https://blog.csdn.net/qq_21997625/article/details/86558168 import xml.etree.ElementTree as ET import os ...
  • 由于小编的系统需要进程间通信,想通过对Xml文件操作,来进行信息交互,...usr/bin/env python#coding:utf-8__author__='fangtao'from xml.etree.ElementTree import ElementTree,Elementclass XmlDao():@staticm...
  • # -*- coding: utf-8 -*-import xml.etree.ElementTree as ETET.register_namespace("nms", "http://www.mycompany.com")tree = ET.parse(r"test.xml")root = tree.getroot()print len(root)id = 1for document in r...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,374
精华内容 549
关键字:

python修改xml

python 订阅