Python 实现一个类,支持文本文件的读取和写入功能(手把手讲解)

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 原生文件操作接口,可以快速实现一个支持文本文件读写功能的类,提升代码复用性和可维护性。