当前位置: 首页 > news >正文

25、Python 文件操作与JSON处理:从基础到实战

Python 文件操作与JSON处理:从基础到实战


文章概览

本文全面解析Python文件操作与JSON数据处理的核心技术,涵盖with语句上下文管理、open函数模式对比、文本/二进制文件操作、配置文件解析实战、json模块高级用法及中文处理技巧。通过丰富的代码示例和实际案例,帮助开发者掌握文件与JSON的高效处理方法,并提供三个针对性练习题巩固知识。


一、Python文件操作精要

1.1 文件操作基础

# 传统文件操作方式
file = None
try:
    file = open('example.txt', 'r', encoding='utf-8')
    content = file.read()
    print(content)
finally:
    if file:
        file.close()

# 现代推荐方式(使用with语句)
with open('example.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    for line in lines:
        print(line.strip())

关键要点:

  • with语句自动处理资源释放,避免文件泄漏
  • 显式指定编码格式(推荐utf-8)
  • 使用read()读取全部内容,readline()逐行读取,readlines()获取列表

1.2 文件模式深度对比

模式描述文件存在文件不存在
r只读正常打开抛出异常
w写入清空内容创建新文件
a追加末尾写入创建新文件
rb二进制读同r模式同r模式异常
w+读写模式清空内容创建新文件

注意事项:

  • 二进制模式用于非文本文件(如图片、视频)
  • w模式具有破坏性,重要文件操作前建议备份
  • 网络传输建议使用二进制模式

1.3 配置文件解析实战

# config.ini
[database]
host = localhost
port = 3306
username = admin

# 解析代码
config = {}
with open('config.ini', 'r') as f:
    current_section = None
    for line in f:
        line = line.strip()
        if line.startswith('[') and line.endswith(']'):
            current_section = line[1:-1]
            config[current_section] = {}
        elif '=' in line and current_section:
            key, value = line.split('=', 1)
            config[current_section][key.strip()] = value.strip()

print(config['database']['port'])  # 输出: 3306

扩展技巧:

  • 使用configparser标准库处理标准INI格式
  • 复杂配置建议使用YAML或TOML格式
  • 敏感信息应通过环境变量传递

二、JSON处理进阶

2.1 核心方法解析

import json

data = {
    "name": "张三",
    "age": 30,
    "courses": ["Python", "Data Science"]
}

# 序列化操作
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)  # 正确显示中文

# 反序列化操作
restored_data = json.loads(json_str)
print(restored_data['name'])  # 输出: 张三

# 文件操作
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False)

with open('data.json', 'r', encoding='utf-8') as f:
    loaded_data = json.load(f)

2.2 中文处理与高级参数

关键参数说明:

  • ensure_ascii=False:禁用ASCII转码,保留中文
  • indent=4:美化输出,增强可读性
  • sort_keys=True:按键名排序输出
  • default=str:处理不可序列化对象

中文编码陷阱示例:

# 错误示范(默认ensure_ascii=True)
print(json.dumps({"测试": "数据"}))  
# 输出: {"\u6d4b\u8bd5": "\u6570\u636e"}

# 正确解决方案
print(json.dumps({"测试": "数据"}, ensure_ascii=False))
# 输出: {"测试": "数据"}

三、实战练习题

3.1 日志分析器

# 统计error出现次数
def analyze_errors(log_file):
    error_count = 0
    with open(log_file, 'r', encoding='utf-8') as f:
        for line in f:
            if '[ERROR]' in line.upper():
                error_count += 1
    return error_count

3.2 数据持久化存储

def save_records(records, filename):
    with open(filename, 'w', encoding='utf-8') as f:
        json.dump({
            "timestamp": datetime.now().isoformat(),
            "data": records
        }, f, ensure_ascii=False, indent=2)

3.3 异常处理优化

def safe_file_operation(filename):
    try:
        with open(filename, 'r', encoding='utf-8') as f:
            return json.load(f)
    except FileNotFoundError:
        print(f"文件 {filename} 不存在")
    except json.JSONDecodeError:
        print("JSON格式错误")
    except Exception as e:
        print(f"未知错误: {str(e)}")

最佳实践总结

  1. 始终使用with语句进行文件操作
  2. JSON处理显式指定ensure_ascii=False
  3. 重要操作添加异常处理机制
  4. 大文件处理建议使用流式读取
  5. 敏感数据避免明文存储

通过掌握这些核心技术与实践经验,开发者可以高效安全地处理各类文件操作和JSON数据交互需求。

相关文章:

  • ArkTS语言入门细节之联合类型
  • 数据仓库的核心架构与关键技术(数据仓库系列二)
  • Minio文件系统
  • 生鲜果蔬便利店实体零售门店商城小程序
  • 底盘---麦克纳姆轮(Mecanum Wheel)
  • 重温java 系列一 Java基础
  • xv6-labs-2024 lab2
  • Python高阶函数-map
  • 接口自动化测试框架搭建
  • Pythia 使用说明
  • GPT-4o 的“图文合体”是怎么做到的
  • 成为社交场的导演而非演员
  • STM32——DAC转换
  • C++类间的 “接力棒“ 传递:继承(下)
  • Ubuntu 服务器上运行相关命令,关闭终端就停止服务,怎么才能启动后在后台运行?
  • 多语言测试专项
  • 嵌入式工程师多线程编程(三)裸机编程、RTOS、Linux及多线程编程的全面对比
  • Linux脚本基础详解
  • 【AI】什么是Rag技术
  • Win10安装GCC/G++运行环境
  • 网站制作周期/外贸网站推广服务
  • 软件定制开发价格/常用的seo工具推荐
  • 十个有趣又好玩的网页/济南网站seo哪家公司好
  • 长沙做旅游网站多少钱/互联网公司有哪些
  • 蒙自做网站的公司/域名查询网站入口
  • 应用asp做网站/百度一下首页极简版