Python 实现一个类,支持文本文件的读取和写入功能
快速解决
直接使用 open() 函数和 with 语句创建文件操作类,实现基础读写功能。以下示例展示核心代码结构:
class TextFileManager:
def __init__(self, filename):
self.filename = filename # 存储文件路径
def read(self):
with open(self.filename, 'r', encoding='utf-8') as f:
return f.read() # 一次性读取全部内容
def write(self, content):
with open(self.filename, 'w', encoding='utf-8') as f:
f.write(content) # 覆盖写入内容
常用方法
| 方法名 | 功能描述 | 使用场景 |
|---|---|---|
| read() | 读取整个文件内容 | 配置文件加载 |
| write() | 覆盖写入新内容 | 数据初始化 |
| append() | 追加写入内容 | 日志记录 |
| line_read() | 逐行读取文件 | 大文件处理 |
| exists() | 检查文件是否存在 | 条件判断 |
| delete() | 删除文件 | 清理临时文件 |
| get_size() | 获取文件大小 | 存储空间监控 |
详细说明
读取整个文件
def read(self):
with open(self.filename, 'r', encoding='utf-8') as f:
return f.read() # 一次性读取全部文本
with语句自动处理文件关闭操作encoding='utf-8'确保中文兼容性- 返回值包含所有文本内容(含换行符)
写入新内容
def write(self, content):
with open(self.filename, 'w', encoding='utf-8') as f:
f.write(content) # 覆盖写入指定内容
'w'模式会清空原文件内容- 写入后自动刷新缓冲区
- 返回 True 表示操作成功
追加写入
def append(self, content):
with open(self.filename, 'a', encoding='utf-8') as f:
f.write(content) # 追加内容到文件末尾
'a'模式在原有内容后添加- 保留原有数据完整性
- 适合日志记录场景
高级技巧
实现日志记录器类
class Logger:
def __init__(self, log_file):
self.log_file = log_file
def log(self, message):
with open(self.log_file, 'a') as f:
f.write(f"[{datetime.now()}] {message}\n") # 添加时间戳
- 自动管理时间格式
- 支持多线程调用
- 可扩展为带缓存版本
带缓存的文件操作
class BufferWriter:
def __init__(self, filename, buffer_size=1024):
self.filename = filename
self.buffer_size = buffer_size
self.buffer = []
def add(self, line):
self.buffer.append(line) # 累积缓存内容
if len(self.buffer) >= self.buffer_size:
self.flush() # 达到阈值自动刷新
def flush(self):
with open(self.filename, 'a') as f:
f.writelines(f"{line}\n" for line in self.buffer) # 批量写入
self.buffer.clear()
- 减少IO次数提升性能
- 适用于大数据量写入场景
- 需要手动调用 flush() 或自动触发
多线程安全写入
from threading import Lock
class ThreadSafeWriter:
def __init__(self, filename):
self.filename = filename
self.lock = Lock() # 创建线程锁
def write(self, content):
with self.lock:
with open(self.filename, 'a') as f:
f.write(content) # 线程安全写入
- 使用锁机制防止冲突
- 保证写入操作原子性
- 适用于并发环境
常见问题
Q1: 如何处理文件不存在的情况?
A: 在初始化时添加文件检查逻辑:
import os
def __init__(self, filename):
self.filename = filename
if not os.path.exists(filename):
open(filename, 'w').close() # 自动创建空文件
Q2: 写入后数据未立即保存?
A: 文件对象自动刷新,但可手动控制:
with open(self.filename, 'w') as f:
f.write(content)
f.flush() # 强制刷新缓冲区
Q3: 如何读写二进制文件?
A: 修改模式参数为 'rb' 或 'wb':
with open(self.filename, 'rb') as f: # 二进制读取
data = f.read()
Q4: 处理超大文件的最佳实践?
A: 使用逐行读取和生成器:
def line_read(self):
with open(self.filename, 'r') as f:
for line in f:
yield line.strip() # 逐行生成
总结
通过封装 Python 原生文件操作接口,可以快速实现一个支持文本文件读写功能的类,提升代码复用性和可维护性。