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

为何加密后的字节无法写入文件?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:45:52