精华内容
下载资源
问答
  • python修改xml文件标签的属性

    千次阅读 2020-06-12 11:57:39
    首先需要说明是,直接修改一个xml文件是不太现实,我们能做是将xml文件中所有文本读出来,修改文本内容之后将其写入到一个新文件中,只是多了一步写入过程,其实也挺简单python读写xml有两个包...

    首先需要说明的是,直接修改一个xml文件是不太现实的,我们能做的是将xml文件中的所有文本读出来,修改文本的内容之后将其写入到一个新的文件中,只是多了一步写入的过程,其实也挺简单的。

    python读写xml有两个包,一个是xml.dom.minidom,一个是xml.etree.ElementTree,但是前者我实在没找到实现方法,所以用的时是后者。

    这里要非常感谢:https://www.cnblogs.com/insane-Mr-Li/p/9963875.html,对于xml.etree.ElementTree的功能写得非常详细

    1、修改的目标

    <osm>
      ...
      <way>
        ...
        <tag k="highway" v="living_street" />
        <tag k="name" v="广州环城高速六车道" />
        ...
      </way>
      ...
    </osm>

    目标是根据第二个tag标签里面的v的车道数,修改第一个tag标签中的v的值

    2、代码

    import xml.etree.ElementTree as xee
    
    laneDict = {'双车道': 'trunk1', '四车道': 'trunk2','六车道': 'trunk3','八车道': 'trunk4'}
    
    def  laneChange():
        # 读取文件
        domTree = xee.parse("highwaySingleDirectUpout.osm.xml")
        # 获得所有节点内容
        root = domTree.getroot()
        # 获得所有标签是"way"的节点内容
        ways = root.findall("way")
        # 逐个修改
        for way in ways:
            # 获得所有标签是"tag"的节点内容
            laneTag = way.findall("tag")
            # 获取车道数信息,因为我的一个way中的tag节点只有两个
            # 这里获取的是第二个tag中的属性"v"内容的最后三个字,例如“双车道”、“四车道”等
            lanStr = laneTag[1].get("v")[-3:]
            # 这里重新设置节点的属性内容
            # 我是需要重设第一个tag节点中属性"v"的内容,修改为"trunk1"、"trunk2"等
            laneTag[0].set("v",laneDict[lanStr])
            # print(laneTag[0].get("v"))
        # 修改完成之后写入到新的xml文件中,这里与minidom有些不同的是:用到的是domTree而不是root
        # 因为有汉字,所以编码设置为utf8,防止乱码
        domTree.write("highway.osm.xml",encoding="utf8")
    
    
    if __name__=="__main__":
        laneChange()

     

    展开全文
  • python批量修改xml文件的标签属性

    千次阅读 2020-01-08 18:25:03
    一、使用背景 之前在ubuntu下做过yolov3目标检测项目(Pascal VOC数据集),...因此需要用python批量修改xml中 filename和path两个属性 所以…找轮子发现了-> https://blog.csdn.net/qq_41983165/article...

    一、使用背景

    之前在ubuntu下做过yolov3目标检测的项目(Pascal VOC数据集),近期ubuntu重装过,所以…标签文件中的路径都错了,labelImg无法关联图片和标签文件,对训练也有影响。
    因此需要用python批量修改xml中 filename和path两个属性值
    在这里插入图片描述
    所以…找轮子发现了-> https://blog.csdn.net/qq_41983165/article/details/87977712
    貌似有很多错误,无法直接用。但提供了很好的思路,在此感谢
    对其优化和修改后: 可以直接批量完整替换掉path,

    以下代码,使用时要修改为自己的路径,且要保证修改前标签文件名和图片名保持一致,代码很简单,自己看吧

    import xml.dom.minidom
    import os
    
    
    path='/home/hujl/dev/darknet-master/scripts/VOCdevkit/VOC2007/Annotations' 			# 原来xml文件存放的路径
    sv_path='/home/hujl/dev/darknet-master/scripts/VOCdevkit/VOC2007/Annotations1' 	# 修改后的xml文件存放路径
    files=os.listdir(path)
    for xmlFile in files:
    	dom=xml.dom.minidom.parse(os.path.join(path,xmlFile)) 	#打开xml文件,送到dom解析
    	root=dom.documentElement
    	item=root.getElementsByTagName('path') 				# 获取path这一node名字及相关属性值
    	a,b = os.path.splitext(xmlFile)							# 并没有取filename标签名,而直接用的文件名,保险期间还是用filename
    	for i in item:
    		i.firstChild.data='/home/hujl/dev/darknet-master/scripts/VOCdevkit/VOC2007/JPEGImages/'  # xml文件对应的图片路径
    	with open(os.path.join(sv_path,xmlFile),'w') as fh:							
    		dom.writexml(fh)					#将图片名 之前的路径全部替换
    
    	# 在路径后面 添加图片名 如 000001.jpg
    	for j in item:
    		i.firstChild.data += (a + '.jpg')
    	with open(os.path.join(sv_path,xmlFile),'w') as filenames:
    		dom.writexml(filenames)
    
    
    展开全文
  • python 修改xml各个节点的值

    千次阅读 2020-03-26 16:24:04
    # coding=utf-8 import os ..."""修改xml路径""" def path_1(FindPath,name1,file_name):#获取文件夹地址,name1:标签名 if not os.path.isdir(file_name): # 判断是否是文件夹,不是文件夹才打开 ...
    # coding=utf-8
    import os
    import os.path
    import xml.dom.minidom
    """修改xml路径"""
    def path_1(FindPath,name1,file_name):#获取文件夹地址,name1:标签名
            if not os.path.isdir(file_name):  # 判断是否是文件夹,不是文件夹才打开
                # print(file_name)  # 打印獲取文件名
                # 读取xml文件
                dom = xml.dom.minidom.parse(os.path.join(FindPath, file_name))#解析dom节点
                root = dom.documentElement
                label= root.getElementsByTagName(name1)#标签列表
                return dom,label
    def xiugai_path(label):
        for i in range(len(label)):  # 遍歷文件列表長度
            print("打印所有路径",label[i].firstChild.data)#打印所有路径
            if label[i].firstChild.data[0:62] == "/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/":
                #print("/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + path_1[i].firstChild.data[
                #                                                                          62:-3] + "jpg", 1111111111)
                #从新赋值
                label[i].firstChild.data = "/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + label[
                                                                                                                 i].firstChild.data[
                                                                                                             62:-3] + "jpg"
            elif label[i].firstChild.data[:28] == "E:\my_own_search\phone\step1":
                #print("/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + path_1[i].firstChild.data[29:],
                #       22222222222222)
                # 从新赋值
                label[i].firstChild.data = "/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + label[i].firstChild.data[
                                                                                                                 29:]
            elif label[i].firstChild.data.split(".")[1]!="jpg":#判断图片后缀是否是jpg
                label[i].firstChild.data =label[i].firstChild.data.split(".")[0]+".jpg"
                # print("ok,地址:{}".format(label[i].firstChild.data))
            else:
                # print("可能需要修改值,如:后缀等",label[i].firstChild.data)
                print(None)
        return len(label)
    #修改neme
    def xiugai_name(label,t_name=None):
        a,b=0,0
        c=0
        for i in range(len(label)):
            c+=1
            print("打印所有name",label[i].firstChild.data,"一个XML有几个name:",c)
            if label[i].firstChild.data=="camera":#判断name是否camera,是修改,不是往下执行
                if t_name:
                    label[i].firstChild.data = "camera1"
                a+=1#为镜头
            elif label[i].firstChild.data=="0":
                label[i].firstChild.data="phone"#从新赋值
                b+=1#为手机
            else:
                print(label[i].firstChild.data)#不是上面两种是那种?看看
        return a,b
    
    #将修改后的xml文件保存
    def baocun(xml_path,dom,file_name):#傳入保存文件路徑和文件名
        with open(os.path.join(xml_path, file_name), 'w') as fh:
            dom.writexml(fh)
            print('写入{}/pose OK!'.format(file_name[0:-4]))
    
    if __name__=="__main__":
        #获得文件夹中所有文件
        FindPath = '/media/hanqing/AI开发/mubiaojiance/sj1'
        #要保存地址
        xml_path='/media/hanqing/AI开发/mubiaojiance/sj1'
        data="name"#需要修改标签name
        a,b=0,0
        FileNames = os.listdir(FindPath)  # 獲取文件内容列表
        print(len(FileNames))
        for file_name in FileNames:#循環讀取文件名
            # print(file_name)#XML打印文件名
            list_1=path_1(FindPath,data,file_name)
            c=xiugai_name(list_1[1],1)##修改xml的name
            # print(c)
            # a+=c[0]#标签name数量
            # b+=c[1]#文件数量
            # xiugai_path(list_1[1])  # 1/解开注释修改路径方法
            baocun(xml_path,list_1[0],file_name)#2/保存数据
        # print("镜头数量为:{}".format(a),"手机标签数量为:{}".format(b),"xml总数:{}".format(len(FileNames)))
    
        # s = []
        # a,b,c=0,0,0
        # for file_name in list_1[1]:
        #     print(file_name)
        #     if not os.path.isdir(file_name):  # 判断是否是文件夹,不是文件夹才打开
        #         print(file_name)#打印獲取文件名
            #读取xml文件
            # print(os.path.join(FindPath,file_name))#打印獲取文件路徑
            # dom = xml.dom.minidom.parse(os.path.join(FindPath,file_name))
            # root = dom.documentElement
    
            # # 获取标签对name之间的值
            # name = root.getElementsByTagName('name')
            # #獲取標籤路徑path
            # path_1=root.getElementsByTagName('path')
        
            # print(len(name))
            # for i in range(len(path_1)):#遍歷文件列表長度
            #     #if name[i] .firstChild.data== 'screw cap':
            #     ##
            #     if path_1[i].firstChild.data[0:62]=="/home/hanqing/SSD-Tensorflow-master/VOC2019/Annotations/phone/":
            #         # print("/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + path_1[i].firstChild.data[
            #         #                                                                          62:-3] + "jpg", 1111111111)
            #         path_1[i].firstChild.data = "/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/"+path_1[i].firstChild.data[62:-3]+"jpg"
            #     elif path_1[i].firstChild.data[:28]=="E:\my_own_search\phone\step1":
            #         # print("/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + path_1[i].firstChild.data[29:],
            #         #       22222222222222)
            #         path_1[i].firstChild.data ="/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/"+path_1[i].firstChild.data[29:]
                # print(len(path_1[i].firstChild.data))#長度
                # print(path_1[i].firstChild.data)
                # path_1[i].firstChild.data =path_1[i].firstChild.data#name[i].firstChild.data
                # print ('修改后的 path')
                # print (path_1[i].firstChild.data)
                # print(len("/home/hanqing/SSD-Tensorflow-master/VOC2019/Annotations/"))
                # c+=1
                # if name[i].firstChild.data=="phone":
                #     a+=1
                # else:
                #     b+=1
                # print(a,b,a+b,c)
    
            ##将修改后的xml文件保存
            # with open(os.path.join(xml_path, file_name), 'w') as fh:
            #     dom.writexml(fh)
            #     print('写入name/pose OK!')
    

    注释相对比较详细,可以依托照葫芦画瓢修改其他节点信息,主要实现对于xml中name、path值的修改

    展开全文
  • 发现一个有意思现象,labelimg打开图片和xml标签时候,看不到标注好框框,仔细查看了xml文件,没发现什么异常,后面试一下,才发现是不能识别xml里坐标有小数点情况。只能四舍五入都转成整数。 如: ...
  • Python批量修改xml的节点

    千次阅读 2019-03-06 18:37:40
    最近再用faster-rcnn训练自己数据,结果发现标签只能用小写字母,其他都会报错。 大写字母可以修改py-faster-rcnn/tools/../lib/datasets/pascal_voc.py中代码, 在_load_pascal_annotation中将 cls = self...

     

    最近再用faster-rcnn训练自己的数据,结果发现标签只能用小写字母,其他的都会报错。
    大写字母可以修改py-faster-rcnn/tools/../lib/datasets/pascal_voc.py中的代码,
    _load_pascal_annotation中将

        cls = self._class_to_ind[obj.find('name').text.lower().strip()]
    • 1

    说是去掉lower可行。

    但是(重点来了),我的标签里有空格:screw cap
    所以我只能修改xml文件中的内容了。
    直接上代码:修改<name>中的内容

    # coding=utf-8
    import os
    import os.path
    import xml.dom.minidom
    
    #获得文件夹中所有文件
    FindPath = '/home/ubuntu/Desktop/myvoc2007/Annotations/'
    FileNames = os.listdir(FindPath)
    s = []
    xml_path = '/home/ubuntu/Desktop/new/'
    for file_name in FileNames:
        if not os.path.isdir(file_name):  # 判断是否是文件夹,不是文件夹才打开
            print file_name
    
        #读取xml文件
        dom = xml.dom.minidom.parse(os.path.join(FindPath,file_name))
    
        root = dom.documentElement
    
        # 获取标签对name之间的值
        name = root.getElementsByTagName('name')
        for i in range(len(name)):
            print name[i].firstChild.data
            if name[i] .firstChild.data== 'screw cap':
                name[i].firstChild.data = 'screwnut'
                print '修改后的 name'
                print name[i].firstChild.data
        #将修改后的xml文件保存
        with open(os.path.join(xml_path, file_name), 'w') as fh:
            dom.writexml(fh)
            print('写入name/pose OK!')
    展开全文
  • 下午一直找python修改xml标签属性应该是怎么修改,总是差那么一点点都写不对这个函数,找到博客大部分没有写这一步。这里记录一下,顺便有两篇优秀博客。 解决这个问题思路是我认为一定会有一个set方法...
  • python批量修改xml.rar

    2019-11-30 21:17:26
    批量修改xml中某个标签值,网上找了很多感觉看起来都好复杂,参考别人代码写了一个。
  • 需求:根据ID定位标签,实现修改value属性的值 # -*- encoding:utf-8 -*- from xml.etree.ElementTree import ElementTree import sys def replaceidvalue(idnum,valuenum): cvnodeid = idnum # 1. 读取xml...
  • 打标时标签名出现了大小写(工程量大时可能会手滑),程序中有改写标签值为小写过程,因为我做py-faster-rcnn 训练时,标签必须全部为小写。 以如下.xml文件为例,我故意把标签增加了大写 <filename>test.jpg...
  • 在制作自己数据集时使用了labelimg软件对图片进行标注,产生了VOC格式数据,但标注生成xml文件标签值难免会产生个别错误造成程序无法跑通,或后期有修改xml标签值的需求,所以得使用Python代码对xml文件进行...
  • 在大老板的安排下最近在某公司实习,实习期间要求实现一个图像识别模块的封装。无奈基础太薄弱,只能将任务细分,单独学习...标签的值就应该修改。 最初的思路是,我遍历了xml文件,那么我只需要将‘新地址’+xml文...
  • 参考:请问用python怎么修改xml的节点? 1. 读取标签文本(Python)  如下 xml 文件一部分,读取里面经纬度 <?xml version="1.0" encoding="UTF-8" ?> <ProductMetaData> ...
  • 这就意味着能够添加或删除标签修改标签名称、改变标签属性修改文本内容等等。这篇文章非常详细给大家介绍了Python利用Beautiful Soup模块修改内容方法,下面话不多说,来看看详细介绍吧。 修改标签 使用...
  • Python Cookbook

    2013-07-31 22:33:26
    11.13 在Tkinter中实现一个带标签的记事本 429 11.14 使用wxPython实现带面板的记事本 431 11.15 在Jython中实现一个ImageJ插件 433 11.16 用Swing和Jython来通过URL查看图片 434 11.17 在Mac OS中获得用户输入 ...
  • 05 Python 错误更正:布尔可以作为字典key 06 Python 今日内容整理 第13章 第13章共1课 第14章 01 数据类型和变量总结 02 集合定义和基本操作方法 03 集合关系运算交,差,并集 04 集合其他内置方法 05 ...
  • 你可以将上面myfile.xml修改一下,比如将改为,然后用IE5直接打开myfile.xml,会得到一个出错信息页面: <?xml version="1.0" encoding="GB2312"?> <title>XML轻松学习手册 <author>ajie <Email>ajie@aolhoo....
  • XML高级编程》既关注基于Microsoft技术,也关注基于Java技术,因此有时读者必须使用这些开发商特有开发工具和平台来完成书中示例。0.2《XML高级编程》读者对象《XML高级编程》旨在向读者提供当今关于XML的...
  • JSP第五篇【JSTL介绍、core标签库、fn方法库、fmt标签库】 JSP第六篇【自定义标签之传统标签】 JSP第七篇【简单标签、应用、DynamicAttribute接口】 JSP面试题都在这里 :microscope:监听器和过滤器 过滤器和...
  • 精通Odoo开发和使用

    2019-03-20 09:38:23
    8.4 视图 xml 文件继承式修改 70 8.4.1 视图元素添加 71 8.4.2 原视图元素属性修改 71 8.5 多态继承 72 8.6 修改其他数据文件 73 8.6.1 删除记录 73 8.6.2 更新数据 73 8.7 委托继承 74 9 理解模型内数据文件 75...
  • Colony:无序”bag“型容器,在高度修改的情况下,其性能优于标准容器。同时,无论插入还是擦除,其都能始终保持指向未擦除元素永久指针。 dynamic_bitset:C++17 动态位集合,只有头文件。 Forest:实现了...
  • 循环层,预测从卷积层获取特征序列的标签(真实)分布; 转录层,把从循环层获取的标签分布通过去重整合等操作转换成最终识别结果; 1. 可视化模型配置 为每个图像分类任务创建一个独立项目,每个项目拥有...
  • freemarker总结

    2015-01-04 14:22:05
    上面的代码中的逻辑表达式用括号括起来主要是因为里面有>符号,由于FreeMarker会将>符号当成标签的结束字符,可能导致程序出错,为了避免这种情况,我们应该在凡是出现这些符号的地方都使用括号. <#if animals....
  • iuhyiuhkjh908u0980

    2009-12-31 19:13:36
    Ext+spring+dwr查询数据库的值无 ... 各位大哥,帮我看看一下,这个Ext+dwr+spring的问题.我搞了大半天,一直没有找出问题的根源. 希望大家能帮我找出问题来数据库:uYou if exists(select * from sysobjects where name...
  • Lucene实战(第2版) 中文版

    热门讨论 2013-03-20 11:04:29
    6.1.3 访问自定义排序中的值 6.2 开发自定义的collector 6.2.1 collector基类 6.2.2 自定义collector:booklinkcollector 6.2.3 alldoccollector类 6.3 扩展queryparser类 6.3.1 自定义queryparser的行为 ...
  • LuceneInAction(第2版)_中文版

    千次下载 热门讨论 2012-07-12 09:52:59
    6.1.3 访问自定义排序中的值 203 6.2 开发自定义的Collector 204 6.2.1 Collector基类 205 6.2.2 自定义Collector:BookLinkCollector 206 6.2.3 AllDocCollector类 207 6.3 扩展QueryParser类 208 6.3.1 ...
  • 引用类型的值,也就是对象是引用类型的一个实例。在Js中引用类型主要有Object,Array,Date,正则,Function等。 <p>Object和Function在后面详细复述。 <p><strong>Array</strong></p...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

python修改xml标签的值

python 订阅