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

第四篇:Python文件操作与异常处理

第一章:文件操作基础与核心原理

1.1 文件系统基础

文件系统是操作系统用于管理存储设备中数据的核心机制。Python通过内置的open()函数实现文件操作,支持文本文件(.txt.csv)和二进制文件(.jpg.dat)的读写

​关键概念​​:

  • ​持久化存储​​:将内存中的数据保存到硬盘(如日志文件、配置文件)
  • ​文件指针​​:记录当前读写位置,可通过seek()tell()操作
1.2 open()函数详解
# 基本语法
file = open(filename, mode='r', encoding=None)

​操作模式全解析​​:

模式描述适用场景
'r'只读(默认)读取配置文件
'w'覆盖写入创建新文件或清空重写
'a'追加写入日志文件记录
'b'二进制模式图片、视频处理
'+'读写更新复杂文件操作

​编码问题​​:文本文件需指定encoding='utf-8',否则可能因系统默认编码差异导致乱码

1.3 文本文件操作实践

​案例1:逐行读取大型日志文件​

with open('server.log', 'r', encoding='utf-8') as file:  
    for line in file:  
        process_line(line.strip())  # 内存友好型处理

​注意​​:read()会一次性加载整个文件到内存,大文件推荐使用生成器逐行处理

​案例2:CSV文件读写​

import csv  
# 写入CSV  
with open('data.csv', 'w', newline='') as file:  
    writer = csv.writer(file)  
    writer.writerow(['Name', 'Age'])  
    writer.writerow(['Alice', 25])  

# 读取CSV  
with open('data.csv', 'r') as file:  
    reader = csv.reader(file)  
    for row in reader:  
        print(row)  
1.4 二进制文件高级操作

​案例3:图片文件复制​

with open('source.jpg', 'rb') as src, open('copy.jpg', 'wb') as dst:  
    dst.write(src.read())  

​拓展​​:使用struct模块处理结构化二进制数据(如网络协议包)


第二章:异常处理机制深度剖析

2.1 异常处理核心结构
try:  
    # 可能引发异常的代码  
except ExceptionType as e:  
    # 异常处理  
else:  
    # 无异常时执行  
finally:  
    # 始终执行(资源清理)  

​关键点​​:

  • ​精确捕获异常​​:避免宽泛的except Exception,优先处理具体异常(如FileNotFoundError
  • ​异常链​​:Python 3支持raise NewError from OriginalError保留原始堆栈

2.2 内置异常类层级
BaseException  
 ├── KeyboardInterrupt  
 ├── SystemExit  
 └── Exception  
      ├── ValueError  
      ├── TypeError  
      └── IOError  
2.3 自定义异常开发实践

​案例4:年龄验证异常​

class InvalidAgeError(Exception):  
    """年龄超出合理范围"""  
    def __init__(self, age):  
        self.age = age  
        super().__init__(f"无效年龄值: {age}(有效范围0-150)")  

def validate_age(age):  
    if not 0 <= age <= 150:  
        raise InvalidAgeError(age)  

# 使用示例  
try:  
    validate_age(200)  
except InvalidAgeError as e:  
    print(e)  # 输出:无效年龄值: 200(有效范围0-150)  

​最佳实践​​:

  • 继承自Exception而非BaseException
  • 添加__str__方法定制错误信息

2.4 上下文管理器进阶

​自定义文件管理器​​:

class FileManager:  
    def __init__(self, filename, mode):  
        self.filename = filename  
        self.mode = mode  

    def __enter__(self):  
        self.file = open(self.filename, self.mode)  
        return self.file  

    def __exit__(self, exc_type, exc_val, exc_tb):  
        self.file.close()  
        return True  # 抑制异常传播  

# 使用示例  
with FileManager('data.txt', 'w') as f:  
    f.write('Hello Context Manager!')  

​拓展​​:使用@contextmanager装饰器简化实现


第三章:综合实战项目

3.1 日志处理系统开发

​功能需求​​:

  1. 支持多级别日志(INFO/WARNING/ERROR)
  2. 自动按日期分割日志文件
  3. 异常捕获与日志记录联动

​核心代码片段​​:

import logging  
from datetime import datetime  

class LogSystem:  
    def __init__(self):  
        self.logger = logging.getLogger(__name__)  
        self.logger.setLevel(logging.INFO)  

        # 创建按日期分割的文件处理器  
        filename = f"log_{datetime.now().strftime('%Y%m%d')}.log"  
        file_handler = logging.FileHandler(filename)  
        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')  
        file_handler.setFormatter(formatter)  

        self.logger.addHandler(file_handler)  

    def log(self, level, message):  
        try:  
            if level == 'INFO':  
                self.logger.info(message)  
            elif level == 'WARNING':  
                self.logger.warning(message)  
            elif level == 'ERROR':  
                self.logger.error(message)  
            else:  
                raise ValueError(f"无效日志级别: {level}")  
        except Exception as e:  
            self.logger.error(f"日志记录失败: {str(e)}")  

# 使用示例  
log_system = LogSystem()  
log_system.log('INFO', '系统启动')  
3.2 文件加密工具开发

​技术要点​​:

  • 使用cryptography库实现AES加密
  • 异常处理:
    • 文件权限异常
    • 加密密钥格式验证
    • 内存溢出防护

第四章:高级主题与性能优化

4.1 大文件处理策略
  • ​内存映射文件​​:使用mmap模块实现高效随机访问
  • ​分块处理​​:
    chunk_size = 1024 * 1024  # 1MB  
    with open('large_file.dat', 'rb') as f:  
        while chunk := f.read(chunk_size):  
            process_chunk(chunk)  
4.2 异常处理性能优化
  • 避免在循环内使用try-except
  • 使用sys.exc_info()获取完整异常信息
  • 日志记录替代print调试

相关文章:

  • PromptUp 网站介绍:AI助力,轻松创作
  • daz dForce 模拟后布料的变化不大,如何增强模拟的效果
  • 2025.04.12【生物信息学新工具】| SPADE:高效聚类与降维分析的利器
  • dify报错 Expecting value: line 1 column 1 (char 0)
  • 计算轴承|滚动轴承故障频率
  • 消失的它:揭开 CoreData 托管对象神秘的消失之谜(上)
  • 26考研——数据的表示和运算_运算方法和运算电路_定点数的加减运算 定点数的乘除运算(2)
  • 什么是原型、原型链?
  • Linux网络编程——数据链路层详解,以太网、MAC地址、MTU、ARP、DNS、NAT、代理服务器......
  • 屏幕模块解析
  • 数据分析-数据预处理
  • 【KWDB 创作者计划】第二卷:开发者实战篇
  • mysql 商城商品属性开发的动态解决方案
  • 个人博客系统后端 - 注册登录功能实现指南
  • 设计模式——工厂模式学习总结
  • 企业数据安全---数据分级
  • 【深度学习与大模型基础】第9章-条件概率以及条件概率的链式法则
  • Linux xorg-server 解析(二)- 如何调试 xorg-server
  • asm汇编字符串操作
  • 【NumPy科学计算:高性能数组操作核心指南】
  • 长春做网站的公司有哪些/nba排名最新赛程
  • 如何避免网站模板侵权/网络推广费用预算表
  • 厦门关键词优化服务/关键词优化排名公司
  • nb-iot网站开发/seo搜索引擎优化课后答案
  • 网站建设与制作培训通知/求个网站
  • 网站建设营销型/怎么在百度上发布广告