Python XML轉(zhuǎn)Json之XML2Dict的使用方法
1. Json讀寫方法
def parseFromFile(self, fname):
"""
Overwritten to read JSON files.
"""
f = open(fname, "r")
return json.load(f)
def serializeToFile(self, fname, annotations):
"""
Overwritten to write JSON files.
"""
f = open(fname, "w")
json.dump(annotations, f, indent=4, separators=(',', ': '), sort_keys=True)
f.write("\n")
2. xml文件的工具包XML2Dict
將xml轉(zhuǎn)換成Python本地字典對象, 訪問子元素和字典常用方法類似,略有不同, 使用 “.”
注: 使用xml2dict庫,需要在本地項目添加 xml2dict.py, object_dict.py,下載鏈接
加載xml文件
from xml2dict import XML2Dict
xml = XML2Dict()
r = xml.parse("待處理文件名.xml")
xml示例[voc2007格式]:
<annotation>
<folder>VOC2007</folder>
<filename>AL_00001.JPG</filename>
<size>
<width>800</width>
<height>1160</height>
<depth>3</depth>
</size>
<object>
<name>l_faster</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>270</xmin>
<ymin>376</ymin>
<xmax>352</xmax>
<ymax>503</ymax>
</bndbox>
</object>
<object>
<name>l_faster</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>262</xmin>
<ymin>746</ymin>
<xmax>355</xmax>
<ymax>871</ymax>
</bndbox>
</object>
<object>
<name>r_faster</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>412</xmin>
<ymin>376</ymin>
<xmax>494</xmax>
<ymax>486</ymax>
</bndbox>
</object>
<object>
<name>r_faster</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>411</xmin>
<ymin>748</ymin>
<xmax>493</xmax>
<ymax>862</ymax>
</bndbox>
</object>
</annotation>
分析下這個文件的格式:
最外一層被<annotation></annotation>包圍
往里一層是:<file_name></file_name>,<size></size>,<object></object>,其中object是列表,包括name和bndbox,示例訪問annotation下級元素
# -*- coding: utf-8 -*-
from xml2dict import XML2Dict
xml = XML2Dict()
r = xml.parse('Annotations/AL_00001.xml')
for item in r.annotation:
print item
print '------------'
for item in r.annotation.object:
print item.name, item.bndbox.xmin, item.bndbox.xmax, item.bndbox.ymin, item.bndbox.ymax
執(zhí)行結(jié)果:
object folder size value filename ------------ l_faster 270 352 376 503 l_faster 262 355 746 871 r_faster 412 494 376 486 r_faster 411 493 748 862
完整代碼[xml2json]
# -*- coding: utf-8 -*-
from xml2dict import XML2Dict
import json
import glob
def serializeToFile(fname, annotations):
"""
Overwritten to write JSON files.
"""
f = open(fname, "w")
json.dump(annotations, f, indent=4, separators=(',', ': '), sort_keys=True)
f.write("\n")
def getAnnos(file_name="", prefix=''):
xml = XML2Dict()
root = xml.parse(file_name)
# get a dict object
anno = root.annotation
image_name = anno.filename
item = {'filename': prefix + image_name, 'class': 'image', 'annotations': []}
for obj in anno.object:
cls = {'l_faster': 'C1', 'r_faster': 'C2'}[obj.name]
box = obj.bndbox
x, y, width, height = int(box.xmin), int(box.ymin), int(box.xmax) - int(box.xmin), int(box.ymax) - int(box.ymin)
item['annotations'] += [{
"class": cls,
"height": height,
"width": width,
"x": x,
"y": y
}]
return item
if __name__ == '__main__':
annotations = []
anno_name = 'AR_001-550.json'
files = glob.glob('Annotations/AR_*.xml')
files = sorted(files)
# print files.sort()
for filename in files:
item = getAnnos(filename, prefix='TFS/JPEGImages/')
print item
print '-----------------'
annotations += [item] #"xmls/AL_00001.xml"
serializeToFile(anno_name, annotations)
以上這篇Python XML轉(zhuǎn)Json之XML2Dict的使用方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python基于QRCode實現(xiàn)生成二維碼的方法【下載,安裝,調(diào)用等】
這篇文章主要介紹了Python基于QRCode實現(xiàn)生成二維碼的方法,結(jié)合實例形式較為詳細(xì)的分析了Python下載,安裝與調(diào)用QRCode實現(xiàn)生成二維碼功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
淺析python中numpy包中的argsort函數(shù)的使用
這篇文章主要介紹了python中numpy包中的argsort函數(shù)的使用,argsort()函數(shù)在模塊numpy.core.fromnumeric中,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2018-08-08
wxpython+pymysql實現(xiàn)用戶登陸功能
這篇文章主要介紹了wxpython+pymysql實現(xiàn)用戶登陸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11
pytest用例間參數(shù)傳遞的兩種實現(xiàn)方式示例
pytest提供了許多運行命令以供定制化運行某一類測試用例或者某個測試用例等,下面這篇文章主要給大家介紹了關(guān)于pytest用例間參數(shù)傳遞的兩種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
Python實現(xiàn)網(wǎng)絡(luò)聊天室的示例代碼(支持多人聊天與私聊)
這篇文章主要介紹了Python實現(xiàn)網(wǎng)絡(luò)聊天室的示例代碼(支持多人聊天與私聊),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
pytorch中Transformer進(jìn)行中英文翻譯訓(xùn)練的實現(xiàn)
本文主要介紹了pytorch中Transformer進(jìn)行中英文翻譯訓(xùn)練的實現(xiàn),詳細(xì)闡述了使用PyTorch實現(xiàn)Transformer模型的代碼實現(xiàn)和訓(xùn)練過程,具有一定參考價值,感興趣的可以了解一下2023-08-08

