尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
备份问题:覆盖保存前怎样留一份可回退副本?新手一步步做
大家好我是 SiKi老师。改完存档或导出配置一点保存文件立刻变成新内容原来那份却找不到了。很多工具直接write_text覆盖原路径中间没有副本。新手需要的不是复杂版本库而是覆盖前先留一份带时间戳、能手动拷回去的备份。本文在 Linux、Python 3.12.15 与 3.13.5 上用临时目录自拟save.json核对。未在 Windows、macOS 实测同一套路径与时间戳文件名。例子不调用任何游戏引擎存档 API也不读写你的真实存档目录。一 先看清直接覆盖就没有回头路frompathlibimportPath pathPath(save.json)path.write_text({level: 1, hp: 100},encodingutf-8)path.write_text({level: 2},encodingutf-8)print(path.read_text(encodingutf-8))第二次写入后磁盘上只剩新内容。Path.write_text会打开目标并写入原内容不会自动进回收站也不会生成.bak。若进程在写入中途失败还可能留下截断文件——那是另一层原子写入问题本文只解决“覆盖前先留副本”。依据Python 3.12 文档 library/pathlib.html 中 Path.write_text。页面版本标签 3.12.16。二 覆盖前用 copy2 留时间戳副本推荐顺序若目标已是文件先shutil.copy2到带时间戳的旁路文件再写新内容。copy2会尽量保留元数据目标已存在时会被替换——所以备份文件名必须每次不同或先拒绝覆盖已有备份。importshutilfrompathlibimportPathdefbackup_then_write(path:Path,new_text:str,stamp:str):backupNoneifpath.is_file():backuppath.with_name(f{path.stem}.{stamp}{path.suffix}.bak)ifbackup.exists():raiseFileExistsError(fbackup already exists:{backup})shutil.copy2(path,backup)path.write_text(new_text,encodingutf-8)returnbackup rootPath(.)# 演示时请换成 TemporaryDirectorytargetroot/save.json注意真实运行请先在临时目录写入原始内容再调用 backup_then_write文件名示例save.20261101T093000.json.bak。时间戳放在扩展名前方便按名字排序后缀.bak提示这是备份。同一时间戳第二次保存应直接报错避免把上一份备份也盖掉。依据Python 3.12 文档 library/shutil.html 中 shutil.copy2复制文件数据与元数据若目标存在则替换。页面版本标签 3.12.16。三 完整可跑的最小流程临时目录把步骤收进一次可复查的运行importshutilimporttempfilefromdatetimeimportdatetime,timezonefrompathlibimportPathdefbackup_then_write(path:Path,new_text:str,stamp:str):backupNoneifpath.is_file():backuppath.with_name(f{path.stem}.{stamp}{path.suffix}.bak)ifbackup.exists():raiseFileExistsError(fbackup already exists:{backup})shutil.copy2(path,backup)path.write_text(new_text,encodingutf-8)returnbackupwithtempfile.TemporaryDirectory()astd:targetPath(td)/save.jsonoriginal{level: 1, hp: 100}target.write_text(original,encodingutf-8)stamp20261101T093000bakbackup_then_write(target,{level: 2, hp: 80},stamp)print(bak.name)print(bak.read_text(encodingutf-8))print(target.read_text(encodingutf-8))# 回退把备份内容写回目标target.write_text(bak.read_text(encodingutf-8),encodingutf-8)print(target.read_text(encodingutf-8)original)本机打印备份名为save.20261101T093000.json.bak备份内容等于原始 JSON目标为新内容回写后与原始一致。新文件首次保存时没有旧文件函数返回None跳过备份即可。时间戳建议用固定格式例如 UTC 的YYYYMMDDTHHMMSS文件名里避免冒号等在部分系统不友好的字符。生成标签可用datetime(2026,11,1,1,30,0,tzinfotimezone.utc).strftime(%Y%m%dT%H%M%S)本机得到20261101T013000。时区与本地钟怎么选由项目约定本文只要求“可排序、可进文件名”。四 接到工具里时的自检清单保存按钮或导出函数里搜索是否直接write_text/open(..., w)打到用户文件有则在前面插入备份步骤。备份路径不要写死成同一个save.bak否则连续保存会覆盖上一份备份回退只能回到“上一次”更早的没有了。先保证备份成功再写新内容若copy2失败应中止保存并提示而不是继续覆盖。回退是显式操作读备份再写回目标或提供“从某.bak恢复”的菜单。不要假设系统回收站会帮你。独立核对脚本scripts/verify_defaults_backup.py中的 T095 段在 Python 3.12.15 与 3.13.5 上均输出 PASS含朴素覆盖丢失、时间戳备份、同戳拒绝、新文件跳过备份、从备份恢复。全部在TemporaryDirectory中完成。五 边界与不要误用的地方本文只覆盖“单文件、覆盖前复制一份旁路备份”。未实现多版本滚动删除、差分备份、跨盘原子替换、引擎 PlayerPrefs / 存档槽 API。shutil.copyfile也可复制内容但不保留全部元数据需要尽量保留修改时间时优先copy2。大文件复制有耗时与磁盘占用需按项目容量评估。未验证杀毒软件锁定文件导致copy2失败网络盘上的元数据保留程度Windows 下超长路径。官方事实write_text覆盖写入copy2复制并在目标存在时替换。教学建议时间戳旁路备份 写前失败即中止。未核实的引擎或云同步行为不要写进工具保证。
RELATED

相关推荐

一句话就出的AI-PPT为什么好看不好用?

一句话就出的AI-PPT为什么好看不好用?

现在基本每家AI公司都有一个PPT生成器。 然而,不管是网页端的 AI PPT 工具,还是装在 Trae 里的本地脚本,生成出来的 PPT 总有几个绕不开的毛病。排版乱,内容挤在一起,字体大小调不了多少,模板只能用系统自带…

📅 2026/11/3 2:50:41
YOLO小目标检测优化技术与工程实践

YOLO小目标检测优化技术与工程实践

YOLO小目标检测优化技术与工程实践 小目标检测(Small Object Detection)是目标检测落地过程中最容易被低估、也最考验工程功力的环节。在通用基准数据集上,一个训练良好的 YOLO(You Only Look Once)模型往往能给出漂亮的平均精度(Average Precision,AP),但一旦换到无…

📅 2026/11/3 2:50:41
视频逐帧加密重编码揭秘:为什么普通改后缀或外层打包根本防不住破解?

视频逐帧加密重编码揭秘:为什么普通改后缀或外层打包根本防不住破解?

核心结论(TL;DR):市面上常见的“修改扩展名、文件头插入混淆字节、自解压外层打包”本质上都属于容器外层伪封装——视频内部的 H.264/H.265 音视频帧(NALU)依然保持明文结构,使用十六进制编辑器修复 ftyp/…

📅 2026/11/3 2:50:41
MORE NEWS

更多资讯

📰

Redis核心命令详解与性能优化实践

1. Redis命令概述Redis作为当今最流行的内存数据库之一,其命令体系是开发者必须掌握的核心技能。我在实际项目中使用Redis已有7年时间,从简单的缓存场景到复杂的分布式系统,Redis命令的灵活运用始终是关键。不同于传统关系型数据库的SQL语法&…

📰

LDA主题模型稳定性评估:用聚类与共识主题提升可靠性

做主题模型的人多少都碰上过这件事:同一份语料、同一套参数,把随机种子换个数字再跑一遍,LDA吐出来的主题词表就能换一副面孔。上一轮还整整齐齐的"用户增长、渠道、留存",下一轮就散成了"投放成本""活动…

📰

区块链工程专业选题指南:技术趋势与产业应用

1. 区块链工程专业选题的价值与趋势区块链技术作为数字经济时代的底层基础设施,正在从单纯的加密货币应用向更广泛的产业领域渗透。根据Gartner最新技术成熟度曲线显示,区块链技术已度过炒作高峰期,进入实际价值验证阶段。对于2025-2026年的区…

📰

Maven依赖管理与构建生命周期详解

1. Maven的核心价值与基本概念作为一名Java开发者,第一次接触Maven时最让我困惑的是:为什么需要这样一个工具?直到经历了手动下载jar包、处理版本冲突、构建失败等痛苦后,才真正理解Maven的价值。Maven本质上是一个项目管理和构建…

📰

美赛D题解析:运筹学与体育经济学的模型构建

1. 项目概述:美赛D题的核心挑战2026年MCM/ICM问题D聚焦体育赛事运营管理这一复杂系统问题,这可能是美赛历史上首次将运筹学与体育经济学深度结合的赛题。题目要求参赛者构建数学模型来优化职业体育联盟的运营策略,涉及球员交易、薪资结构、赛…

📰

Delphi Web前端开发入门:用Pascal与TMS WEB Core做网页

简介:Delphi Web前端开发教程以TMS WEB Core框架为主线,面向希望用Delphi或Lazarus快速进入Web应用开发的初学者与进阶开发者,也适合传统Delphi程序员补齐前端与跨平台发布知识。教程从Delphi/Object Pascal的历史与现状讲起,梳理…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬