Python——數據存儲:XML操作


  XML文件已被廣泛使用在各種應用中,如Web、移動APP、桌面GUI應用等等,幾乎都會有XML文件的身影。不過現在一般不會將大部分的應用數據用xml文件存儲,但至少會使用XML文件保存一些配置信息。在Python中,需要導入XML模塊或其子模塊,並利用提供的API來操作XML文件。如,xml.etree.ElementTree模塊,通過該模塊的parse函數讀取XML文件。
由於下面XML操作都需要用到XML文件,文件如下:
persons.xml文件的內容:

<?xml version="1.0" ?>
<persons>
    <item type="int">20</item>
<item type="str">names</item>
<item type="dict" uuid="123">
<salary type="int">2000</salary>
<age type="int">30</age>
<name type="str">Gell</name>
</item>
<item type="dict" uuid="45">
<salary type="int">3000</salary>
<age type="int">40</age>
<name type="str">Chen</name>
</item>
<item type="dict" uuid="167">
<salary type="int">4000</salary>
<age type="int">50</age>
<name type="str">Ling</name>
</item>
</persons>
以下介紹python語言對XML文件的具體操作。


一、讀取與檢索XML文件
from xml.etree.ElementTree import parse

doc = parse('./files/persons.xml')
for item in doc.iterfind('item'):
# 讀取id節點的值
salary = item.findtext('salary')
# 讀取name節點的值
age = item.findtext('age')
# 讀取price節點的值
name = item.findtext('name')

type = item.get('type')
uuid = item.get('uuid')
print('type={}'.format(type))
print('uuid={}'.format(uuid))
print('salary={}'.format(salary))
print('age', '=', age)
print('name', '=', name)
print('-----------------')

二、字典轉成XML字符串
import dicttoxml
from xml.dom.minidom import parseString
import os

d = [20,'names',
{'name':'Gell','age':30,'salary':2000},
{'name':'Chen','age':40,'salary':3000},
{'name':'Ling','age':50,'salary':4000}
]
bxml = dicttoxml.dicttoxml(d,custom_root='persons')
xml = bxml.decode('utf-8')
print(xml)
print('----------------------')
dom = parseString(xml)
prettyxml = dom.toprettyxml(indent=' ')
print(prettyxml)

#將XML字符串保存到文件中。
os.makedirs('files',exist_ok=True)
f=open('files/persons.xml','w',encoding='utf-8')
f.write(prettyxml)
f.close()

三、XML字符串轉為python字典
import xmltodict
import pprint

f=open('./files/persons.xml','rt',encoding='utf-8')
xml = f.read()
d=xmltodict.parse(xml)
print(d)
f.close()

pp = pprint.PrettyPrinter(indent=0)
pp.pprint(d)
 

參考文獻:
1、《python從菜鳥到高手》,作者:李寧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM