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

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

一、处理JSON文件

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

常用模块:json模块

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

使用方法示例

1. 读取JSON文件(反序列化)
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文件(序列化)
import jsondata = {"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文件
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文件
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支持和更好的性能。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/85371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | 搜索哨兵-对接分布式gRPC服务

哨兵&#xff08;centennial&#xff09;负责接待客人&#xff0c;直接与调用方对接。哨兵的核心组件包括service HUB和connection pool。service HUB用于与服务中心通信&#xff0c;获取可提供服务的节点信息。connection pool用于缓存与index worker的连接&#xff0c;避免每…

CSS3实现的账号密码输入框提示效果

以下是通过CSS3实现输入框提示效果的常用方法&#xff0c;包含浮动标签和动态提示两种经典实现方案&#xff1a; 一、浮动标签效果 <div class"input-group"><input type"text" required><label>用户名</label> </div><…

maven编译时跳过test过程

如果代码里有无法在打包环境中测试的部分&#xff0c;则直接运行mvn clean package&#xff0c;因为测试失败&#xff0c;会导致打包失败。目前有两种方式可以跳过测试&#xff1a; 1. mvn clean package -DskipTests&#xff0c;这会跳过执行阶须&#xff0c;但仍会生成测试所…

美业+智能体,解锁行业转化新密码(2/6)

摘要&#xff1a;中国美业市场近年蓬勃发展&#xff0c;规模持续扩大&#xff0c;预计不久将突破万亿级别&#xff0c;但同时也面临着诸多挑战&#xff0c;如获客成本攀升、服务质量不稳定、难以满足消费者多元化个性化需求等。智能体技术的出现为美业带来了新的发展机遇&#…

设计模式——责任链设计模式(行为型)

摘要 责任链设计模式是一种行为型设计模式&#xff0c;旨在将请求的发送者与接收者解耦&#xff0c;通过多个处理器对象按链式结构依次处理请求&#xff0c;直到某个处理器处理为止。它包含抽象处理者、具体处理者和客户端等核心角色。该模式适用于多个对象可能处理请求的场景…

react/vue移动端项目,刷新页面404的原因以及解决办法

一 、 项目 移动端 二、背景 1、问题描述&#xff1a;react/vue移动端项目&#xff0c;正常的页面操作跳转&#xff0c;不会出现404的问题&#xff0c;但是一旦刷新&#xff0c;就会出现404报错 2、产生原因&#xff1a; React Router是客户端的路由&#xff0c;当再次刷新时…

数据结构-算法学习C++(入门)

目录 03二进制和位运算04 选择、冒泡、插入排序05 对数器06 二分搜索07 时间复杂度和空间复杂度08 算法和数据结构09 单双链表09.1单双链表及反转09.2合并链表09.2两数相加09.2分隔链表 013队列、栈、环形队列013.1队列013.2栈013.3循环队列 014栈-队列的相互转换014.1用栈实现…

用JS实现植物大战僵尸(前端作业)

1. 先搭架子 整体效果&#xff1a; 点击开始后进入主场景 左侧是植物卡片 右上角是游戏的开始和暂停键 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

深入理解设计模式之代理模式

深入理解设计模式之&#xff1a;代理模式 一、什么是代理模式&#xff1f; 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式。它为其他对象提供一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用&#xff0c;可以在不改变目标…

Ubuntu设置之初始化

安装SSH服务 # 安装 OpenSSH Server sudo apt update sudo apt install -y openssh-server# 检查 SSH 服务状态 sudo systemctl status ssh # Active: active (running) since Sat 2025-05-31 17:13:07 CST; 6s ago# 重启服务 sudo systemctl restart ssh自定义分辨率 新…

【仿生机器人】极具前瞻性的架构——认知-情感-记忆“三位一体的仿生机器人系统架构

基于您的深度需求分析&#xff0c;我将为您设计一个全新的"认知-情感-记忆"三位一体的仿生机器人系统架构。以下是经过深度优化的解决方案&#xff1a; 一、核心架构升级&#xff08;三体认知架构&#xff09; 采用量子纠缠式架构设计&#xff1a; 认知三角&#xf…

Python量化交易12——Tushare全面获取各种经济金融数据

两年前写过Tushare的简单使用&#xff1a; Python量化交易08——利用Tushare获取日K数据_skshare- 现在更新一下吧&#xff0c;这两年用过不少的金融数据库&#xff0c;akshare&#xff0c;baostock&#xff0c;雅虎的&#xff0c;pd自带的......发现还是Tushare最稳定最好用&…

python打卡day39@浙大疏锦行

知识点回顾 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 1. 图像数据格式 - 灰度图像 &#xff1a;单通道&#xff0c;像素值范围通常0-255&#xff0c;形状为…

源码解析(二):nnUNet

原文 &#x1f600; nnU-Net 是一个用于生物医学图像分割的自配置深度学习框架&#xff0c;可自动适应不同的数据集。可用于处理和训练可能规模庞大的二维和三维医学图像。该系统分析数据集属性并配置优化的基于 U-Net 的分割流程&#xff0c;无需手动参数调整或深度学习专业知…

clickhouse如何查看操作记录,从日志来查看写入是否成功

背景 插入表数据后&#xff0c;因为原本表中就有数据&#xff0c;一时间没想到怎么查看插入是否成功&#xff0c;因为对数据源没有很多的了解&#xff0c;这时候就想怎么查看下插入是否成功呢&#xff0c;于是就有了以下方法 具体方法 根据操作类型查找&#xff0c;比如inse…

udp 传输实时性测量

UDP&#xff08;用户数据报协议&#xff09;是一种无连接的传输协议&#xff0c;适用于实时性要求较高的应用&#xff0c;如视频流、音频传输和游戏等。测量UDP传输的实时性可以通过多种工具和方法实现&#xff0c;以下是一些常见的方法和工具&#xff1a; 1. 使用 iperf 测试…

pikachu通关教程- over permission

如果使用A用户的权限去操作B用户的数据&#xff0c;A的权限小于B的权限&#xff0c;如果能够成功操作&#xff0c;则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。 水平越权 当我们以Lucy账号登录&#xff0c;查询个人信息时&#xff0c;会有…

nc 命令示例

nc -zv 实用示例 示例 1&#xff1a;测试单个 TCP 端口&#xff08;最常见&#xff09; 目标&#xff1a; 检查主机 webserver.example.com 上的 80 端口 (HTTP) 是否开放。 nc -zv webserver.example.com 80成功输出&#xff1a; Connection to webserver.example.com (19…

Redis是什么

注&#xff1a;本人不懂Redis是什么&#xff0c;问的大模型&#xff0c;让它用生动浅显的语言向我解释。为了防止忘记&#xff0c;我把它说的记录下来。接下来的解释都是大模型生成的&#xff0c;如果有错误的地方欢迎指正 。 Redis 是什么&#xff1f;&#xff08;一句话解释&…

CVE-2021-28164源码分析与漏洞复现

漏洞概述 漏洞名称&#xff1a;Jetty 路径解析逻辑漏洞导致 WEB-INF 敏感信息泄露 漏洞编号&#xff1a;CVE-2021-28164 CVSS 评分&#xff1a;7.5 影响版本&#xff1a;Jetty 9.4.37 - 9.4.38 修复版本&#xff1a;Jetty ≥ 9.4.39 漏洞类型&#xff1a;路径遍历/信息泄露 C…