You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类读取文件后文件变为0字节的问题求助

问题分析与解决

错误原因

问题出在__init__方法里的self.fileWrite = open('/home/pi/temp/file.txt', 'w')这一行:

  • Python中使用'w'(写入模式)打开文件时,会直接截断并清空原文件的所有内容,这个操作在执行open函数的瞬间就完成了,和后续是否调用write方法无关。
  • 你调用read()时能输出'ABC',是因为在打开写模式之前,已经通过with语句把文件内容读取到了内存中的self.fileRead变量里,这个数据和当前文件的实际内容无关,所以控制台能输出,但文件本身已经被清空。

优化实现方案

遵循按需打开文件、用上下文管理器自动管理资源的原则,修改类的实现,避免误操作和资源泄漏:

class FileHandler:
    def __init__(self, file_path='/home/pi/temp/file.txt'):
        self.file_path = file_path

    def create(self):
        # 仅在需要写入时打开文件,with语句会自动关闭文件句柄
        with open(self.file_path, 'w') as f:
            f.write('ABC')

    def read(self):
        # 读取时打开文件,读完自动关闭
        with open(self.file_path, 'r') as f:
            for line in f.readlines():
                print(line.strip())

调用示例

# 写入内容
file_op = FileHandler()
file_op.create()

# 读取内容
file_op = FileHandler()
file_op.read()

优化点说明

  • 仅在需要执行读写操作时才打开文件,避免初始化阶段的误操作
  • 使用with上下文管理器,无需手动调用close(),确保文件句柄被正确释放
  • 类的职责更清晰,避免持有不必要的文件句柄作为实例属性

内容的提问来源于stack exchange,提问作者Gabriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:12:27