Python 中的 XML 文件允许操纵和解析 XML 数据。XML (可扩展标记语言) 是一种广泛使用的数据交换格式。
使用 Python 打开 XML 文件并读取数据
要使用 Python 从 XML 文件中读取数据,可以使用内置的 XML 解析器模块。在这一部分,我们将学习如何通过探索流行的 Python 库来解析 Python 中的 XML 数据。
用于解析 XML 文件的最常用的库是 lxml 和 ElementTree
。
使用 lxml 库
lxml
库是一个流行的 XML 文件读取器,它对于解析 XML 数据非常有效。可以使用 pip
命令安装 lxml
库。
from lxml import etree
root = etree.parse('file.xml')
for elem in root.iter():
print(elem.tag, elem.text)
使用 ElementTree
ElementTree 是一个内置库,允许解析 XML 文件。使用 ElementTree 时,会附带内置的 模块,这些模块允许解析和创建元素。要使用 ElementTree 库,需要 import
它。
以下是如何使用 ElementTree
解析 XML 文件的一个示例
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
for elem in root:
print(elem.tag, elem.text)
通过使用这些方法中的任何一种,都可以有效地读取 XML 文件。
如何编写 XML
要在 Python 中编写 XML,可以使用 ElementTree XML API 库。以下两个代码示例演示如何创建和编写 XML
示例 1:在 Python 中创建和编写 XML
import xml.etree.cElementTree as ET
### Create XML element tree
root = ET.Element("Person")
name = ET.SubElement(root, "Name")
name.text = "John"
age = ET.SubElement(root, "Age")
age.text = "30"
### Write XML element tree to file
tree = ET.ElementTree(root)
tree.write("person.xml")
示例 2:创建和编写带有属性的 XML
import xml.etree.cElementTree as ET
### Create XML element tree with attributes
root = ET.Element("Person", {"id": "123"})
name = ET.SubElement(root, "Name")
name.text = "Jane"
age = ET.SubElement(root, "Age")
age.text = "25"
### Write XML element tree to file with custom formatting
tree = ET.ElementTree(root)
tree.write("person.xml", encoding="utf-8", xml_declaration=True)
在这两个示例中,ElementTree()
类用于创建一个 XML 元素 tree
。然后使用 write()
方法将元素 tree
写入 XML 文件。通过在第二个示例中指定 encoding
和 xml_declaration,将创建一个自定义格式的 XML 文件,并在顶部添加 XML 声明。
如何将 XML 转换为 JSON
将 XML 转换为 JSON 是一项常见的任务,可以轻松实现。
xmltodict
模块允许我们将 XML 文档转换为字典,然后可以使用内置的 json
模块轻松地将其转换为 JSON。以下是一个示例代码片段,演示如何使用此方法
import xmltodict
import json
# Load XML file
with open('data.xml') as xml_file:
xml_data = xml_file.read()
# Convert XML to Python dictionary
dict_data = xmltodict.parse(xml_data)
# Convert dictionary to JSON
json_data = json.dumps(dict_data)
# Output JSON data
print(json_data)
xml.etree.ElementTree
模块允许我们解析 XML 文档并创建一个 Element 对象,可以遍历该对象以获取所需数据。一旦我们以字典形式获得数据,就可以使用 json
模块将其转换为 JSON。以下是一个示例代码片段,演示如何使用此方法
import xml.etree.ElementTree as ET
import json
# Load XML file
tree = ET.parse('data.xml')
root = tree.getroot()
# Traverse the Element object to get required data
xml_dict = {}
for child in root:
xml_dict[child.tag] = child.text
# Convert dictionary to JSON
json_data = json.dumps(xml_dict)
# Output JSON data
print(json_data)
如何将 XML 转换为 CSV
要将 XML 转换为 CSV,可以使用 xml.etree.ElementTree
模块和 csv 模块。以下两个代码示例可帮助你入门
示例 1:使用 ElementTree 和 CSV 模块
import csv
import xml.etree.ElementTree as ET
### Open the XML file
tree = ET.parse('example.xml')
root = tree.getroot()
### Open the CSV file
csv_file = open('example.csv', 'w')
csvwriter = csv.writer(csv_file)
### Write the column headers
header = []
for child in root[0]:
header.append(child.tag)
csvwriter.writerow(header)
### Write the data rows
for item in root.findall('.//item'):
row = []
for child in item:
row.append(child.text)
csvwriter.writerow(row)
### Close the CSV file
csv_file.close()
示例 2:使用 pandas
import pandas as pd
import xml.etree.ElementTree as ET
### Load the XML file into a dataframe
tree = ET.parse('example.xml')
root = tree.getroot()
dfcols = ['name', 'email', 'phone']
df = pd.DataFrame(columns=dfcols)
for node in root:
name = node.find('name').text
email = node.find('email').text
phone = node.find('phone').text
df = df.append(
pd.Series([name, email, phone], index=dfcols),
ignore_index=True)
### Save the dataframe to a CSV file
df.to_csv('example.csv', index=False)
在这两个示例中,xml.etree.ElementTree
模块用于解析 XML 文件和提取数据。csv
模块(在示例 1 中)或 pandas 库(在示例 2 中)用于将数据写入 CSV 文件。