python xml文件的创建、解析

 xml文件的创建和解析代码

from xml.dom.minidom import parse
from xml.dom import minidom
import xml.etree.ElementTree as et

# xml格式
'''
<?xml version="1.0" encoding="utf-8"?>
<annotation>
	<folder>img</folder>
	<filename>1.jpg</filename>
	<object>
		<name>equip</name>
		<bndbox>
			<xmin>197</xmin>
			<ymin>56</ymin>
			<xmax>742</xmax>
			<ymax>929</ymax>
		</bndbox>
	</object>
</annotation>
'''

# 创建xml文件
def writeXML(save_path):
	# 文档树
	# domTree = parse('./testxml.xml')    # 在已有的文件写入
	domTree = minidom.Document()          # 创建新的xml

	# 创建新的annotation节点
	annotation_node = domTree.createElement('annotation')
	# 用DOM对象添加根节点
	domTree.appendChild(annotation_node)

	# 创建folder节点
	folder_node = domTree.createElement('folder')
	# 创建folder节点的文字节点
	folder_text_value = domTree.createTextNode('img')
	# 文字节点加入folder节点
	folder_node.appendChild(folder_text_value)
	# folder节点加入annotation节点
	annotation_node.appendChild(folder_node)

	filename_node = domTree.createElement('filename')
	filename_text_value = domTree.createTextNode('1.jpg')
	filename_node.appendChild(filename_text_value)
	annotation_node.appendChild(filename_node)

	object_node = domTree.createElement('object')
	annotation_node.appendChild(object_node)

	name_node = domTree.createElement('name')
	name_text_value = domTree.createTextNode('equip')
	name_node.appendChild(name_text_value)
	object_node.appendChild(name_node)

	bndbox_node = domTree.createElement('bndbox')
	object_node.appendChild(bndbox_node)

	xmin_node = domTree.createElement('xmin')
	xmin_text_value = domTree.createTextNode('197')
	xmin_node.appendChild(xmin_text_value)
	bndbox_node.appendChild(xmin_node)

	ymin_node = domTree.createElement('ymin')
	ymin_text_value = domTree.createTextNode('56')
	ymin_node.appendChild(ymin_text_value)
	bndbox_node.appendChild(ymin_node)

	xmax_node = domTree.createElement('xmax')
	xmax_text_value = domTree.createTextNode('742')
	xmax_node.appendChild(xmax_text_value)
	bndbox_node.appendChild(xmax_node)

	ymax_node = domTree.createElement('ymax')
	ymax_text_value = domTree.createTextNode('929')
	ymax_node.appendChild(ymax_text_value)
	bndbox_node.appendChild(ymax_node)

	with open(save_path, 'w') as f:
		domTree.writexml(f, addindent='\t',newl='\n', encoding='utf-8')
	print('create the xml file finish!')


# xml解析
def parse_xml(xml_path):
	# 解析xml文件
	tree_obj = et.parse(xml_path)

	# 获取节点元素
	root = tree_obj.getroot()

	folder = root.find('folder').text
	filename = root.find('filename').text

	for object in root.findall('object'):
		name = object.find('name').text
		xmin = int(object.find('bndbox').find('xmin').text)
		ymin = int(object.find('bndbox').find('ymin').text)
		xmax = int(object.find('bndbox').find('xmax').text)
		ymax = int(object.find('bndbox').find('ymax').text)
	print(f'folder:{folder}, filename:{filename}, name:{name}, xmin:{xmin}, ymin:{ymin}, xmax:{xmax}, ymax:{ymax}')
	print('parse the xml file finish!')

if __name__ == "__main__":
	save_path = './test.xml'
	writeXML(save_path)
	parse_xml(save_path)

猜你喜欢

转载自blog.csdn.net/jin__9981/article/details/105066931