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 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提供了几种不同的解析方式。
常用模块:
- xml.etree.ElementTree(简称ET) - 最常用
- lxml - 第三方库,功能更强大
- xml.dom - DOM方式解析
- xml.sax - SAX方式解析
我们重点介绍最常用的ElementTree和lxml
1. 使用xml.etree.ElementTree(内置模块)
读取XML文件
import xml.etree.ElementTree as ET # 从文件解析 tree = ET.parse('data.xml') # 解析XML文件 root = tree.getroot() # 获取根元素 # 从字符串解析 xml_str = ''' 王五 28 游泳 编程 ''' 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 创建数据 直接构造字典/列表 创建Element和SubElement 四、如何选择?
- 优先使用JSON:当数据主要用于程序间交换,特别是Web API时
- 使用XML:当需要处理复杂文档结构、需要注释或处理已有XML系统时
记住:对于大多数现代应用,JSON通常是更简单、更高效的选择。XML则在某些特定领域(如文档处理、传统企业系统)仍有其优势。
(图片来源网络,侵删)(图片来源网络,侵删)(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。