日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python批量修改xml屬性的實現方式

瀏覽:132日期:2022-08-03 17:07:34

今天來說說xml那些事兒.如何批量修改指定文件夾下的xml文件的指定屬性.分三步走,首先,我們先看看如何讀寫單個

的xml文件;第二步,來看看如何遍歷指定文件夾下的所有文件,獲取到所有文件的文件名;第三步,我們來看看一二之間

該如何銜接.好,lets do it

step1:對單個xml文件進行讀寫

給定一個xml文件:

<?xml version='1.0' encoding='utf-8'?><catalog> <maxid>4</maxid> <login username='pytest' passwd=’123456’> <caption>Python</caption> <item id='4'> <caption>測試</caption> </item> </login> <item id='2'> <caption>Zope</caption> </item></catalog>

來看看代碼,怎么讀取里面的屬性(大家先照著注釋理解一遍,有空我再來詳細說明)

#coding=utf-8import xml.dom.minidom #打開xml文檔dom=xml.dom.minidom.parse(’test.xml’) #得到文檔元素對象root=dom.documentElementprint root.nodeNameprint root.nodeValueprint root.nodeTypeprint root.ELEMENT_NODE #1.獲取maxid 這一node名字(沒有屬性值),如何獲取里面的文本?bb=root.getElementsByTagName(’maxid’)b=bb[0]print b.nodeName #2.獲取login 這一node名字及相關屬性值login=root.getElementsByTagName(’login’)login=login[0] #獲取login的相關屬性值un=login.getAttribute('username')print unpd=login.getAttribute('passwd')print pd#修改先關屬性值 #3.獲取節點名為item的相關屬性值item=root.getElementsByTagName(’item’) #獲取了所有名字為item的nodeitem=item[0] #拿到第一個item,獲取相關屬性值i=item.getAttribute('id')#獲取id的值print i #4.獲取標簽對之間的數據,并修改為新的值caption=root.getElementsByTagName(’caption’)c0=caption[0]print c0.firstChild.data #firstChild屬性返回被選節點的第一個子節點,.data表示獲取該節點數據 c1=caption[1]print c1.firstChild.data c2=caption[2] #caption節點有三個!!!print c2.firstChild.data#修改標簽對之間的數據,直接對節點數據賦值c2.firstChild.data=’dhhdlh’print c2.firstChild.data

好了,看完了demo,我們現在來實戰操練一番,使用通用的VOC2007標注數據集,xml文件長這個樣子:

<annotation verified='no'> <folder>row_img</folder> <filename>000002</filename> <path>/home/nvidia/labelImg-master/img_change/row_img/000002.jpg</path> <source> <database>Unknown</database> </source> <size> <width>1200</width> <height>800</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>qwe</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>513</xmin> <ymin>265</ymin> <xmax>921</xmax> <ymax>663</ymax> </bndbox> </object> <object> <name>wieoiwpe</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>513</xmin> <ymin>265</ymin> <xmax>921</xmax> <ymax>663</ymax> </bndbox> </object></annotation>

那么,我們該如何修改呢?請看:

#coding=utf-8import xml.dom.minidom ###批量讀取xml文件 ###讀取單個xml文件dom=xml.dom.minidom.parse(’000002.xml’) root=dom.documentElement #獲取標簽對name/pose之間的值name=root.getElementsByTagName(’name’)pose=root.getElementsByTagName(’pose’)#原始信息print ’原始信息’n0=name[0]print n0.firstChild.datan1=name[1]print n1.firstChild.data p0=pose[0]print p0.firstChild.datap1=pose[1]print p1.firstChild.data #修改標簽對之間的值n0.firstChild.data=’circle’n1.firstChild.data=’circle’ p0.firstChild.data=’ok’p1.firstChild.data=’ok’#打印輸出print ’修改后的 name’print n0.firstChild.dataprint n1.firstChild.dataprint ’修改后的 pose’print p0.firstChild.dataprint p1.firstChild.data

好了,現在我們學會了如何對單個文件進行修改,那么多個文件呢?

step2:遍歷指定路徑下的文件:

#coding=utf-8import osimport os.pathimport xml.dom.minidom path='/home/nvidia/xmlReader/xml/'files=os.listdir(path) #得到文件夾下所有文件名稱s=[]for xmlFile in files: #遍歷文件夾 if not os.path.isdir(xmlFile): #判斷是否是文件夾,不是文件夾才打開 print xmlFile

(path下我放的是幾個xml文件),打印xmlFile我們發現是這樣的:

python批量修改xml屬性的實現方式

看到沒,看到這個的話就說明我們已經成功一半了!!!接下來我們把之前寫的讀取單個xml文件的代碼放進去

#coding=utf-8import osimport os.pathimport xml.dom.minidom path='/home/nvidia/xmlReader/xml/'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(xmlFile) root=dom.documentElement #獲取標簽對name/pose之間的值 name=root.getElementsByTagName(’name’) pose=root.getElementsByTagName(’pose’) #原始信息 print ’原始信息’ n0=name[0] print n0.firstChild.data n1=name[1] print n1.firstChild.data p0=pose[0] print p0.firstChild.data p1=pose[1] print p1.firstChild.data

直接運行,報錯!!我...

不要急,我們一點點來解決,,遇到問題是很正常的嘛!!!首先我們看看遇到什么錯?

python批量修改xml屬性的實現方式

打印除了000001.xml但是在實際讀取的時候出錯了!!還說找不到在這個文件?why??仔細想想發現,這里可能要傳入的是

每個xml文件的具體路徑,有了這個想法之后我們再來看看:

這個時候就設涉及到Python路徑拼接的知識了:

path='/home/nvidia/xmlReader/xml/'xmlFile也是幾個字符串os.path.join(path,xmlFile)#os.path.join('/home/test','test.xml')

那么,我們就拼接好了.然后就執行看看:

python批量修改xml屬性的實現方式

啊哈?!居然對了!!哈哈哈,大功告成!接下來就是先將圖像分好類,然后就可以批量修改文件了

python批量修改xml屬性的實現方式

好了,讓我們開看看最終的代碼:

#coding=utf-8import osimport os.pathimport xml.dom.minidom path='/home/nvidia/xmlReader/xml/'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(’name’) pose=root.getElementsByTagName(’pose’) #原始信息 print ’原始信息’ n0=name[0] print n0.firstChild.data p0=pose[0] print p0.firstChild.data #修改 n0.firstChild.data=’circle’ p0.firstChild.data=’ok’ #打印輸出 print ’修改后的 name’ print n0.firstChild.data print ’修改后的 pose’ print p0.firstChild.data print ’~~~~~’

其實,就我個人來講,還有個需求,就是文件匹配:根據A文件夾中的文件名,在B文件夾匹配同名但不同格式的文件,然后將他們單獨

拎出來,復制到C文件夾保存,具體該怎么做呢?下一篇博客即將揭曉,拭目以待.

******************2018.1.27更新*******************

上面說的方法基于我們已經知道了xml文件中有幾個pose屬性幾個object屬性,但是一般在修改之前我們是不知道的,那么如何自動的去識別并修改每個屬性的值呢?接下來我們開看看

這里要用到一個重要的關系:Python中的迭代(不同于c++/C,不能寫成for i in len(object))而要寫成

for i in range(len(pose)):print pose[i].firstChild.data

這樣的話,即使我們不知道有幾處要修改的地方,但是我們都能夠找出來,修改掉(這里每個pose都修改成同樣的屬性)

修改后,還需要保存到xml文件,修改后的代碼為:

#coding=utf-8import osimport os.pathimport xml.dom.minidom path='/home/nvidia/xmlReader/xml/'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)) ###最核心的部分os.path.join(path,xmlFile),路徑拼接,輸入的是具體路徑 root=dom.documentElement #獲取標簽對name/pose之間的值 name=root.getElementsByTagName(’name’) pose=root.getElementsByTagName(’pose’) #重命名class name for i in range(len(name)): print name[i].firstChild.data name[i].firstChild.data=’circle’ print name[i].firstChild.data for j in range(len(pose)): print pose[j].firstChild.data pose[j].firstChild.data=’ok’ print pose[j].firstChild.data #保存修改到xml文件中 with open(os.path.join(path,xmlFile),’w’) as fh: dom.writexml(fh) print(’寫入name/pose OK!’) # with open(’dom_write.xml’,’w’,encoding=’UTF-8’) as fh:# # 4.writexml()第一個參數是目標文件對象,第二個參數是根節點的縮進格式,第三個參數是其他子節點的縮進格式,# # 第四個參數制定了換行格式,第五個參數制定了xml內容的編碼。# dom.writexml(fh,indent=’’,addindent=’t’,newl=’n’,encoding=’UTF-8’)# print(’寫入xml OK!’)

以上這篇python批量修改xml屬性的實現方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩视频网站在线观看| 青青国产精品| 最新亚洲一区| 91精品福利观看| 成人影视亚洲图片在线| 国产一区导航| 另类综合日韩欧美亚洲| 亚洲国产一区二区在线观看 | 亚洲va久久| 精品视频在线一区二区在线| 国产激情在线播放| 夜久久久久久| 久久国产麻豆精品| 久久精品一区二区不卡| 免费成人在线观看| 欧美韩日一区| 日韩精品中文字幕吗一区二区| 国产精品久久久久久久久久10秀 | 国产极品嫩模在线观看91精品| 国精品一区二区三区| 97久久超碰| 欧美日韩少妇| 91一区二区| 日韩av不卡在线观看| 精品在线播放| 麻豆免费精品视频| 亚洲制服一区| 免费成人网www| 精品亚洲成人| 日韩在线视频一区二区三区| 亚洲爱爱视频| 精品国产一区二区三区2021| 亚洲精品自拍| 欧美在线亚洲| 久久精品中文| 国产美女高潮在线| 国产精品一区亚洲| 亚洲综合婷婷| 亚洲一区二区免费看| 久久国产毛片| 日韩成人精品一区二区| 国产精品二区影院| 日韩综合小视频| 午夜在线一区二区| 亚洲高清二区| 91亚洲国产高清| 欧美a级一区二区| 日本国产欧美| 美女国产精品| 99pao成人国产永久免费视频 | 国产精品片aa在线观看| 在线看片日韩| 国产精品美女久久久| 午夜日韩av| 亚洲香蕉网站| 久久久国产亚洲精品| 狠狠久久伊人| 九九九精品视频| 久久国产人妖系列| 欧美一区成人| 国产免费播放一区二区| 日韩高清在线不卡| 婷婷综合成人| 色综合视频一区二区三区日韩 | 国产精品原创| 荡女精品导航| 精品欠久久久中文字幕加勒比| 91精品国产一区二区在线观看| 日韩综合一区二区三区| 日韩中文字幕无砖| 亚洲欧美久久精品| 日本一区二区三区中文字幕| 亚洲欧美一级| 日本一区二区三区视频在线看| 蜜臀久久久99精品久久久久久| 亚洲综合欧美| 亚洲一二av| 青草久久视频| 国产精品一区二区美女视频免费看| 欧美一区激情| 美女国产精品久久久| 国产成人精品999在线观看| 国产精品99一区二区三| 日韩欧美视频专区| 亚洲一级影院| 麻豆91精品| 日韩精品免费一区二区夜夜嗨 | 蜜臀久久久久久久| 涩涩涩久久久成人精品| 欧美日韩一区二区三区不卡视频| 国产精品一级| 国产一区二区三区久久| 国产日韩电影| 午夜欧美精品| 亚洲tv在线| 久久精品资源| 蜜臀av免费一区二区三区| 欧美一级专区| 国产欧美一区二区三区国产幕精品 | 久久精品青草| 国产精品嫩草99av在线| 日韩精品国产欧美| 国产剧情在线观看一区| 伊人久久视频| 日韩亚洲精品在线| 日韩中出av| 国产伊人久久| 黄色成人91| 久久国产尿小便嘘嘘| 97精品视频在线看| 91精品1区| 欧美精品国产白浆久久久久| 手机在线电影一区| 国产精品美女久久久浪潮软件| 日韩一区二区三区精品视频第3页| 久久精品国产99国产| 国产高清一区| 欧美一区不卡| 99久久精品国产亚洲精品| 亚洲开心激情| 精品久久福利| 久久国产高清| 精品深夜福利视频| 国产亚洲在线观看| 久久伊人亚洲| 性色av一区二区怡红| 麻豆成人91精品二区三区| 亚洲免费激情| 精品国产一区二区三区噜噜噜| 午夜日韩在线| 欧美91在线|欧美| 午夜日韩福利| 国产精品嫩草影院在线看| 久久婷婷久久| 青草久久视频| 日本精品不卡| 亚洲免费成人av在线| 成人欧美一区二区三区的电影| 老鸭窝亚洲一区二区三区| 精品久久网站| 综合激情网...| 91精品一区国产高清在线gif| 日韩va亚洲va欧美va久久| 久久一区二区三区喷水| 国产精品久久国产愉拍| 悠悠资源网久久精品| 国内不卡的一区二区三区中文字幕| 三级一区在线视频先锋| 国内在线观看一区二区三区| 香蕉久久久久久久av网站| 国产a亚洲精品| 亚洲毛片视频| 国产精品99一区二区| 精品国产亚洲一区二区三区大结局| 亚洲欧美视频一区二区三区| 中文在线免费视频| 国产一卡不卡| 亚洲一区av| 99视频精品全部免费在线视频| 青青草91视频| 激情欧美日韩一区| 久久久久久夜| 国产极品一区| 亚洲有吗中文字幕| 欧美在线亚洲综合一区| 神马午夜在线视频| 欧美aa在线视频| 一区二区91| 亚洲在线电影| 99国内精品| 国产精品av一区二区| 热三久草你在线| 另类综合日韩欧美亚洲| 欧美亚洲综合视频| 亚洲2区在线| 首页亚洲欧美制服丝腿| 亚洲天堂黄色| 日韩久久精品网| 97精品国产| 国产成年精品| 国产一区二区三区网| 蜜桃精品视频| 国产视频一区二区在线播放| 日韩激情综合| 亚洲精品综合| 免费观看久久久4p| 在线精品视频一区| 噜噜噜久久亚洲精品国产品小说| 国产精品av一区二区| 91精品综合| 在线视频观看日韩| av中文字幕在线观看第一页| 国产一区三区在线播放| 欧美激情视频一区二区三区在线播放| 日本午夜精品| 国产午夜精品一区在线观看| 国产欧美另类| 另类综合日韩欧美亚洲| 精品日韩一区| 亚洲一区资源|