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]'}

猜你喜欢

转载自blog.csdn.net/lanyuelvyun/article/details/77676332
今日推荐