Python进阶【四】:XML和JSON文件处理

Python提供了多种处理XML和JSON文件的方式,让我们来看看最常用的方法。

一、处理JSON文件

JSON在Python中处理起来非常简单,因为它的结构与Python的字典(dict)和列表(list)几乎一致。

常用模块:json模块

优点:Python标准库自带,无需安装,使用简单

使用方法示例

1. 读取JSON文件(反序列化)
python 复制代码
import json

# 从文件读取
with open('data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)  # 返回Python字典或列表

# 从字符串读取
json_str = '{"name": "张三", "age": 25, "hobbies": ["篮球", "读书"]}'
data = json.loads(json_str)  # 注意是loads(load string)

print(data['name'])  # 输出: 张三
2. 写入JSON文件(序列化)
python 复制代码
import json

data = {
    "name": "李四",
    "age": 30,
    "married": False,
    "children": None
}

# 写入文件
with open('output.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)  # indent使输出更美观

# 转换为JSON字符串
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)  # 输出: {"name": "李四", "age": 30, ...}

参数说明

  • ensure_ascii=False:允许非ASCII字符(如中文)直接显示,而不是转成Unicode
  • indent=4:缩进4个空格,使JSON更易读

二、处理XML文件

XML处理稍微复杂一些,Python提供了几种不同的解析方式。

常用模块:

  1. xml.etree.ElementTree(简称ET) - 最常用
  2. lxml - 第三方库,功能更强大
  3. xml.dom - DOM方式解析
  4. xml.sax - SAX方式解析

我们重点介绍最常用的ElementTreelxml

1. 使用xml.etree.ElementTree(内置模块)

读取XML文件
python 复制代码
import xml.etree.ElementTree as ET

# 从文件解析
tree = ET.parse('data.xml')  # 解析XML文件
root = tree.getroot()  # 获取根元素

# 从字符串解析
xml_str = '''
<person>
    <name>王五</name>
    <age>28</age>
    <interests>
        <interest>游泳</interest>
        <interest>编程</interest>
    </interests>
</person>
'''
root = ET.fromstring(xml_str)  # 从字符串解析

# 遍历XML
print(root.tag)  # 输出: person
for child in root:
    print(child.tag, child.text)  # 输出: name 王五, age 28...

# 查找特定元素
for interest in root.findall('.//interest'):  # 查找所有interest元素
    print(interest.text)  # 输出: 游泳 编程
创建和写入XML文件
python 复制代码
import xml.etree.ElementTree as ET

# 创建XML结构
person = ET.Element("person")
name = ET.SubElement(person, "name")
name.text = "赵六"
age = ET.SubElement(person, "age")
age.text = "35"

# 添加带属性的元素
address = ET.SubElement(person, "address", type="home")
address.text = "北京市海淀区"

# 生成XML树并写入文件
tree = ET.ElementTree(person)
tree.write('output.xml', encoding='utf-8', xml_declaration=True)

2. 使用lxml(第三方库,需安装:pip install lxml

lxml提供了更强大的XPath支持和更好的性能。

python 复制代码
from lxml import etree

# 解析XML
tree = etree.parse('data.xml')
root = tree.getroot()

# 使用XPath查找
names = root.xpath('//name/text()')  # 获取所有name元素的文本
print(names)  # 输出: ['王五']

# 创建XML
root = etree.Element("school")
class1 = etree.SubElement(root, "class", id="1")
etree.SubElement(class1, "student").text = "小明"
etree.SubElement(class1, "student").text = "小红"

# 输出
print(etree.tostring(root, pretty_print=True, encoding='unicode'))

三、JSON vs XML处理对比

操作 JSON处理方式 XML处理方式
读取 json.load()/json.loads() ET.parse()/ET.fromstring()
写入 json.dump()/json.dumps() ET.ElementTree().write()
数据结构 字典/列表 树状结构(元素、属性、文本)
查询数据 直接字典访问data['key'] find()/findall()/XPath
创建数据 直接构造字典/列表 创建ElementSubElement

四、如何选择?

  • 优先使用JSON:当数据主要用于程序间交换,特别是Web API时
  • 使用XML:当需要处理复杂文档结构、需要注释或处理已有XML系统时

记住:对于大多数现代应用,JSON通常是更简单、更高效的选择。XML则在某些特定领域(如文档处理、传统企业系统)仍有其优势。

相关推荐
渣渣苏3 分钟前
Langchain实战快速入门
人工智能·python·langchain
lili-felicity12 分钟前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道15 分钟前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
ZH154558913128 分钟前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同76528 分钟前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子34 分钟前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
白日做梦Q44 分钟前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习
喵手1 小时前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv
喵手1 小时前
Python爬虫实战:地图 POI + 行政区反查实战 - 商圈热力数据准备完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·地区poi·行政区反查·商圈热力数据采集
熊猫_豆豆1 小时前
YOLOP车道检测
人工智能·python·算法