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则在某些特定领域(如文档处理、传统企业系统)仍有其优势。

相关推荐
struggle20257 小时前
OramaCore 是您 AI 项目、答案引擎、副驾驶和搜索所需的 AI 运行时。它包括一个成熟的全文搜索引擎、矢量数据库、LLM界面和更多实用程序
人工智能·python·rust
chicpopoo8 小时前
Python打卡DAY40
人工智能·python·机器学习
waterHBO8 小时前
改进自己的图片 app
python
机器人梦想家8 小时前
【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用
python
abcnull9 小时前
mybatis的mapper对应的xml写法
xml·sql·spring·mybatis·mapper
Blue桃之夭夭9 小时前
HTML、XML、JSON 是什么?有什么区别?又是做什么的?
xml·html·json
代码讲故事9 小时前
解决 xmlsec.InternalError: (-1, ‘lxml & xmlsec libxml2 library version mismatch‘)
linux·python·pip·lxml·xmlsec·libxml2
小于村9 小时前
pom.xml 文件中配置你项目中的外部 jar 包打包方式
xml·java·jar
扶风呀9 小时前
pom.xml中标签详解_
xml
MuQYun10 小时前
Pytorch的梯度控制
人工智能·pytorch·python