第四篇: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 日志处理系统开发
功能需求:
- 支持多级别日志(INFO/WARNING/ERROR)
- 自动按日期分割日志文件
- 异常捕获与日志记录联动
核心代码片段:
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
调试