python批量修改xml文件中的信息

項目場景:

在做目標檢測時,重新進行標註會耗費大量的時間,如果能夠批量對xml中的信息進行修改,那麼將會節省大量的時間,接下來將詳細介紹如何修改標註文件xml中的相關信息。

問題描述:

例如:當我有一批標註好的xml文件,文件格式如下圖所示 :

<?xml version='1.0' encoding='us-ascii'?>
<annotation>
	<folder>VOC2012</folder>
	<filename>x0y1115.png</filename>
	<source>
		<database>The VOC2007 Database</database>
		<anotation>PASCAL VOC2007</anotation>
		<image>flickr</image>
	</source>
	<size>
		<width>2233</width>
		<height>2177</height>
		<depth>3</depth>
	</size>
	<segmented>1</segmented>
	<object>
		<name>[1]</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>1</difficult>
		<bndbox>
			<xmin>0</xmin>
			<ymin>1115</ymin>
			<xmax>30</xmax>
			<ymax>1145</ymax>
		</bndbox>
	</object>
</annotation>
        }

分析:

可以發現整個標註文件的層級是按照annotation——folder/filename/…/object——name/pose/truncated/difficult/bndbox——xmin/ymin/xmax/ymax這樣的格式來的。現在我需要修改標註目標的類別信息(將[1]改成lack),其他信息同理可以修改。Python代碼如下:

解決方案:

import os
import os.path
from xml.etree.ElementTree import parse, Element
#批量修改xml中內容
def test():
    path = "./datasets/Annotations/" # xml文件所在的目錄
    files = os.listdir(path)  # 遍歷文件夾下所有文件名稱
    for xmlFile in files:  # 對所有文件進行循環遍歷處理
        path1 = "./datasets/Annotations/"+xmlFile #定位當前處理的文件的路徑
        newStr = os.path.join(path, xmlFile)

        dom = parse(newStr)  # 獲取xml文件中的參數
        root = dom.getroot()  # 獲取數據結構

        for obj in root.iter('object'): # 獲取object節點中的name子節點(此處如果要換成別的比如bndbox)
            name = obj.find('name').text # 獲取相應的文本信息
            #  以下為自定義的修改規則,我這裡把文本信息為[1]~[5]的內容改成lack,依次類推
            if name in ['[1]','[2]','[3]','[4]','[5]']:
                new_name = 'lack'
            elif name in ['[6]','[7]','[8]','[9]','[10]']:
                new_name = 'black_point'
            elif name in ['[11]','[12]','[13]','[14]','[15]']:
                new_name = 'crack'
            else:
                new_name = 'Satellite_InkDrop'
            obj.find('name').text = new_name # 修改
        dom.write(path1, xml_declaration=True) # 保存到指定文件
        pass
if __name__ == '__main__':
    test()

總結

到此這篇關於python批量修改xml文件中的信息的文章就介紹到這瞭,更多相關python批量修改xml內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: