为何加密后的字节无法写入文件?Python文件写入问题排查
问题原因与修复方案
问题出在哪?
你这段代码的核心问题是打开文件后没有关闭文件对象。Python的文件IO默认采用缓冲机制,调用write()后数据会先暂存在内存缓冲区里,并不会立刻写入磁盘。如果程序结束前没触发缓冲区刷新(比如关闭文件),缓冲区里的加密数据就不会被写到datastore.txt里,导致文件为空。
另外还有个小细节问题:from cryptography.fernet import Fernet放在代码中间不符合Python的导入规范,建议移到代码最顶部。
怎么修复?
有两种可靠的修复方式,优先推荐第二种:
方式1:手动调用close()关闭文件
# 导入语句移到顶部,符合Python编码规范 from cryptography.fernet import Fernet data = "My secret data!" datastoreName = "Datastore" datastore = open(datastoreName + ".txt", "wb") key = Fernet.generate_key() fernet = Fernet(key) encData = fernet.encrypt(data.encode()) datastore.write(encData) # 手动关闭文件,强制将缓冲区数据写入磁盘 datastore.close()
方式2:使用with语句(推荐)
with是Python管理资源的语法糖,会在代码块执行完毕后自动关闭文件,哪怕中间出现异常也能保证文件正确关闭,完全不用手动处理关闭逻辑:
from cryptography.fernet import Fernet data = "My secret data!" datastoreName = "Datastore" key = Fernet.generate_key() fernet = Fernet(key) encData = fernet.encrypt(data.encode()) # with块内操作文件,代码块结束后自动关闭文件 with open(datastoreName + ".txt", "wb") as datastore: datastore.write(encData)
内容的提问来源于stack exchange,提问作者gamer merch
相关产品推荐
相关产品推荐

