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

06-01 1172阅读

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提供了几种不同的解析方式。

    常用模块:

    1. xml.etree.ElementTree(简称ET) - 最常用
    2. lxml - 第三方库,功能更强大
    3. xml.dom - DOM方式解析
    4. 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则在某些特定领域(如文档处理、传统企业系统)仍有其优势。

      Python进阶【四】:XML和JSON文件处理
      (图片来源网络,侵删)
      Python进阶【四】:XML和JSON文件处理
      (图片来源网络,侵删)
      Python进阶【四】:XML和JSON文件处理
      (图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码