Python?XML自動化處理全攻略分享
一、常用 XML 處理庫簡介
- xml.etree.ElementTree
- Python 標(biāo)準(zhǔn)庫,輕量級,適合基礎(chǔ)操作。
- lxml
- 第三方高性能庫,支持 XPath、XSLT 和 Schema 驗證。
- xml.dom / xml.sax
- 標(biāo)準(zhǔn)庫實現(xiàn),適合處理大型 XML 或事件驅(qū)動解析。
- 輔助工具庫
xmltodict(XML ↔ 字典)、untangle(XML → Python 對象)等。
二、xml.etree.ElementTree 詳解
1. 解析 XML
import xml.etree.ElementTree as ET
# 從字符串解析
root = ET.fromstring("<root><child>text</child></root>")
# 從文件解析
tree = ET.parse("file.xml")
root = tree.getroot()
2. 數(shù)據(jù)查詢與修改
# 遍歷子元素
for child in root:
print(child.tag, child.attrib)
# 查找元素
element = root.find("child")
element.text = "new_text" # 修改文本
element.set("attr", "value") # 修改屬性
3. 生成與保存 XML
root = ET.Element("root")
child = ET.SubElement(root, "child", attrib={"key": "value"})
child.text = "content"
tree = ET.ElementTree(root)
tree.write("output.xml", encoding="utf-8", xml_declaration=True)
三、lxml 庫高級操作
1. XPath 查詢
from lxml import etree
tree = etree.parse("file.xml")
elements = tree.xpath("http://book[price>20]/title/text()") # 查詢價格>20的書名
2. XML Schema 驗證
schema = etree.XMLSchema(etree.parse("schema.xsd"))
parser = etree.XMLParser(schema=schema)
try:
etree.parse("data.xml", parser)
except etree.XMLSchemaError as e:
print("驗證失敗:", e)
四、XML 與 Excel 互轉(zhuǎn)
1. XML → Excel (XLSX)
from openpyxl import Workbook
import xml.etree.ElementTree as ET
tree = ET.parse("books.xml")
root = tree.getroot()
wb = Workbook()
ws = wb.active
ws.append(["書名", "作者", "價格"])
for book in root.findall("book"):
title = book.find("title").text
author = book.find("author").text
price = book.find("price").text
ws.append([title, author, price])
wb.save("books.xlsx")
2. Excel (XLSX) → XML
from openpyxl import load_workbook
import xml.etree.ElementTree as ET
def xlsx_to_xml(input_file, output_file):
wb = load_workbook(input_file)
ws = wb.active
root = ET.Element("bookstore")
headers = [cell.value.strip() for cell in ws[1]]
for row in ws.iter_rows(min_row=2, values_only=True):
book = ET.SubElement(root, "book")
for idx, value in enumerate(row):
tag = ET.SubElement(book, headers[idx])
tag.text = str(value)
ET.ElementTree(root).write(output_file, encoding="utf-8", xml_declaration=True)
xlsx_to_xml("books.xlsx", "books_from_excel.xml")
五、XML 與數(shù)據(jù)庫交互
存儲到 SQLite
import sqlite3
import xml.etree.ElementTree as ET
conn = sqlite3.connect("books.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS books (title TEXT, author TEXT, price REAL)")
tree = ET.parse("books.xml")
for book in tree.findall("book"):
title = book.find("title").text
author = book.find("author").text
price = float(book.find("price").text)
cursor.execute("INSERT INTO books VALUES (?, ?, ?)", (title, author, price))
conn.commit()
conn.close()
六、XML 與 JSON 互轉(zhuǎn)
1. XML → JSON
import xmltodict
import json
with open("books.xml") as f:
xml_data = f.read()
data_dict = xmltodict.parse(xml_data)
with open("books.json", "w") as f:
json.dump(data_dict, f, indent=4, ensure_ascii=False)
2. JSON → XML
import xmltodict
import json
with open("books.json") as f:
json_data = json.load(f)
xml_data = xmltodict.unparse(json_data, pretty=True)
with open("books_from_json.xml", "w") as f:
f.write(xml_data)
七、性能優(yōu)化與常見問題
1. 性能建議
- 小型數(shù)據(jù): 使用
xml.etree.ElementTree。 - 大型數(shù)據(jù): 使用
lxml的iterparse流式解析。 - 內(nèi)存敏感場景: 使用
xml.sax事件驅(qū)動解析。
2. 常見問題解決
處理命名空間:
# lxml 示例
namespaces = {"ns": "http://example.com/ns"}
elements = root.xpath("http://ns:book", namespaces=namespaces)
特殊字符處理:
element.text = ET.CDATA("<特殊字符>&")
依賴安裝
pip install lxml openpyxl xmltodict
輸入輸出示例
- XML 文件 (
books.xml)
<bookstore>
<book>
<title>Python編程</title>
<author>John</author>
<price>50.0</price>
</book>
</bookstore>
- JSON 文件 (
books.json)
{
"bookstore": {
"book": {
"title": "Python編程",
"author": "John",
"price": "50.0"
}
}
}
通過本指南,可快速實現(xiàn) XML 與其他格式的互轉(zhuǎn)、存儲及復(fù)雜查詢操作,滿足數(shù)據(jù)遷移、接口開發(fā)等多樣化需求。
到此這篇關(guān)于Python XML自動化處理全攻略分享的文章就介紹到這了,更多相關(guān)Python XML自動化處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Pandas讀取某列某行數(shù)據(jù)之loc和iloc用法總結(jié)
loc是location的意思,和iloc中i的意思是指integer,所以它只接受整數(shù)作為參數(shù),下面這篇文章主要給大家介紹了關(guān)于利用Pandas讀取某列某行數(shù)據(jù)之loc和iloc用法的相關(guān)資料,需要的朋友可以參考下2022-03-03
python實現(xiàn)讀取大文件并逐行寫入另外一個文件
下面小編就為大家分享一篇python實現(xiàn)讀取大文件并逐行寫入另外一個文件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python實現(xiàn)PDF和TIFF格式之間的相互轉(zhuǎn)換
PDF是數(shù)據(jù)文檔管理領(lǐng)域常用格式之一,主要用于存儲和共享包含文本、圖像、表格、鏈接等的復(fù)雜文檔,而TIFF常見于圖像處理領(lǐng)域, 在實際應(yīng)用中,我們可能有時需要將PDF文件轉(zhuǎn)換為TIFF圖像,本文將介紹如何使用Python實現(xiàn)PDF和TIFF格式之間的相互轉(zhuǎn)換,需要的朋友可以參考下2024-07-07
基于Python實現(xiàn)MUI側(cè)滑菜單a標(biāo)簽跳轉(zhuǎn)
這篇文章主要介紹了基于Python實現(xiàn)MUI側(cè)滑菜單a標(biāo)簽跳轉(zhuǎn),mui最接近原生APP體驗的高性能前端框架,MUI側(cè)滑常見的場景有下拉刷新,側(cè)滑抽屜,側(cè)滑刪除,側(cè)滑返回以及側(cè)滑菜單等等,下面來看看文章內(nèi)容詳細的介紹,需要的朋友可以參考一下2021-11-11
Pandas在數(shù)據(jù)分析和機器學(xué)習(xí)中的應(yīng)用及優(yōu)勢
Pandas是Python中用于數(shù)據(jù)處理和數(shù)據(jù)分析的庫,它提供了靈活的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作工具,包括Series和DataFrame等。Pandas還支持大量數(shù)據(jù)操作和數(shù)據(jù)分析功能,包括數(shù)據(jù)清洗、轉(zhuǎn)換、篩選、聚合、透視表、時間序列分析等2023-04-04

