直接覆盖:先破坏旧版,再构造新版
with open(target, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False)
w在打开成功时就截断旧文件,不会等新内容全部准备好。- 若写到一半遇到磁盘错误、进程退出或设备断电,主路径可能只剩半截内容。
- 代码短,适合“丢了也能重建”的临时输出;重要配置和用户数据要更谨慎。
“用 w 打开再写入”看起来没问题,危险却藏在打开和写完之间。选择保存策略,再把故障插进不同步骤,比较主文件最终留下的是完整旧版、残缺半版,还是完整新版。
(尚未创建)
w 在打开成功时就截断旧文件,不会等新内容全部准备好。os.replace 成功时把临时文件替换到主路径;在 POSIX 同文件系统条件下,此替换是原子的。