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
相关产品推荐
相关产品推荐

