python 创建并解析XML

建议使用python库中的xml.etree.ElementTree,参考自用 ElementTree 在 Python 中解析 XML

(1 )创建XML文件

# coding=utf-8
try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET
import xml.dom.minidom

output_dir = './data/' # 输出路径

root = ET.Element('OCR') # 创建根节点
imname = ET.SubElement(root, 'imname') # 创建root的子节点imname
imname.text = 'cat.jpg' # 子节点imname的文本内容

resolution = ET.SubElement(root, 'resolution') # 创建root的又一个子节点imname
resolution.set('x','100') 
resolution.set('y','100') # 子节点resolution的属性
bbox = ET.SubElement(resolution, 'bbox') # 创建resolution的子节点bbox
bbox.text = str([100,50,25,40,66,75,48,90])

# 有缩进的输出XML文件
xml = xml.dom.minidom.parseString(ET.tostring(root,'utf-8'))
pretty_xml_as_string = xml.toprettyxml()
#print pretty_xml_as_string # 控制台输出
with open(output_dir + 'lanyue.xml', 'w') as f:
	f.write(pretty_xml_as_string.encode('utf-8'))

生成的lanyue.xml内容如下:

<?xml version="1.0" ?>
<OCR>
	<imname>cat.jpg</imname>
	<resolution x="100" y="100">
		<bbox>[100, 50, 25, 40, 66, 75, 48, 90]</bbox>
	</resolution>
</OCR>

(2 )解析XML文件
解析上面的lanyue.xml文件。(由于每个XML文件的内容都不一样,所以主要看下面的提取方式,存储方式按个人喜好任意。)

# coding=utf-8
try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET

tree = ET.parse('lanyue.xml')
root = tree.getroot()
# 解析出来的内容存储在了一个字典annos里(字典的结构自己随便定义)
annos = dict()
annos['imname'] = root.find('imname').text  # 提取出root的节点imname的文本内容
resolution = root.find('resolution') # 找到root的节点resolution
image_dict = {}
image_dict['width'] = float(resolution.attrib ['x'].strip("‘"))# 提取出节点resolution的属性值x
image_dict['height'] = float(resolution.attrib ['y'].strip("‘"))  
annos['resolution'] = image_dict

annos['bbox'] = resolution.find('bbox').text  # 提取出resolution的节点bbox的文本内容
print annos

输出的字典annos格式如下:

{'resolution': {'width': 100.0, 'height': 100.0}, 'imname': 'cat.jpg', 'bbox': '[100, 50, 25, 40, 66, 75, 48, 90]'}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值