首页/新闻资讯/正文详情

备份问题:覆盖保存前怎样留一份可回退副本?新手一步步做

发布时间:2026/11/3 2:50:28 来源:云帆数科 栏目:资讯中心
备份问题:覆盖保存前怎样留一份可回退副本?新手一步步做
大家好我是 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复制并在目标存在时替换。教学建议时间戳旁路备份 写前失败即中止。未核实的引擎或云同步行为不要写进工具保证。

相关推荐

下载 | Win11 23H2正式版最新ISO系统映像 (22631.7654、多合一版本)-修复系统问题
下载 | Win11 23H2正式版最新ISO系统映像 (22631.7654、多合一版本)-修复系统问题

⏩ 【资源A010】Win11 23H2正式版最新原版ISO系统映像🔶 Windows 11 23H2 正式版渠道的最新ISO系统映像,2026年10月更新版本已上传,资源链接内会定期跟进,更新ISO版本,建议收藏备用!Win11 23H2最新ISO映像下… · 2026/11/3 2:49:27

* LangGraph 基础入门:定位、核心概念与第一个可运行图
* LangGraph 基础入门:定位、核心概念与第一个可运行图

一、LangGraph总览 LangGraph 运行时底层基于自研的 Pregel 运行时,其核心思想借鉴了 Google Pregel 计算模型,用于组织和执行复杂的图计算流程。 1.0. LangGraph和LangChain的版本迭代及定位 LangChain 1.x 的定位发生了明显变化:旧式 Ch… · 2026/11/3 2:49:27

squish6.3自动化代码用例编写
squish6.3自动化代码用例编写

一、 用例函数之 init() 和 cleanup() 附加模式下 一定要注意用例结束后的恢复工作,否则会造成后续用例失败; squish中默认提供了init和cleanup函数: init()方法失败,main()方法不执行,cleanup()方法会执行&#xff1b… · 2026/11/3 2:49:27

Excel日期格式不生效?文本型日期批量转换与排错指南
Excel日期格式不生效?文本型日期批量转换与排错指南

前两天有人抱着一份从业务系统导出的台账来找我,说 Excel 里明明把单元格格式设成了日期,数据却纹丝不动,只有挨个双击再回车才会变成日期样子,几千行总不能一行行点下去。这个场景我这些年遇到过太多次,Excel 设置单元… · 2026/11/3 3:25:33

WebSocket协议DDoS防御与智能流量清洗技术解析
WebSocket协议DDoS防御与智能流量清洗技术解析

1. 项目背景与核心挑战2026年的即时通讯应用正面临前所未有的DDoS攻击威胁。随着WebSocket长连接技术的普及和5G网络的全面覆盖,攻击者能够以更低的成本发动更大规模的流量攻击。去年某头部社交平台因遭受1.4Tbps的混合攻击导致服务中断37分钟,直接损失超… · 2026/11/3 3:25:33

电力系统网络安全:多传感器融合技术实践与优化
电力系统网络安全:多传感器融合技术实践与优化

1. 电力系统网络安全现状与多传感器融合的必要性电力系统作为关键基础设施,其网络安全防护一直是行业重点。近年来随着智能电网和物联网设备的普及,电力系统的攻击面呈指数级增长。传统基于单一数据源的入侵检测系统(IDS)已难以应… · 2026/11/3 3:25:33

数字序列999999999的技术解析与应用实践
数字序列999999999的技术解析与应用实践

1. 项目概述"999999999"这个看似简单的数字序列,实际上蕴含着丰富的可能性。作为一名从业多年的数字文化观察者,我注意到这类重复数字组合在多个领域都有着特殊意义和应用场景。从编程中的占位符到金融交易中的特殊标识,从游戏设计… · 2026/11/3 3:25:33

电力系统多传感器融合安全监测技术解析
电力系统多传感器融合安全监测技术解析

1. 电力系统网络安全现状与挑战现代电力系统正面临前所未有的网络安全威胁。去年某省级电网调度中心遭遇的APT攻击导致区域负荷控制系统异常,直接经济损失超过2000万元。这类事件暴露出传统单点安全监测的局限性——攻击者只需突破一个传感器节点的防御就能潜伏数月… · 2026/11/3 3:25:33

RFSoC ADC/DAC调试:6MHz频偏定位AXI时钟与抽取因子
RFSoC ADC/DAC调试:6MHz频偏定位AXI时钟与抽取因子

简介:资源是一份面向具备一定硬件调试经验的FPGA与射频工程师的RFSoC实战调试文档,聚焦Alinx公司Zynq UltraScaleRFSoC开发板上ADC/DAC链路的频率配置与信号完整性排查。文中完整还原了从原厂demo工程(rfevm_rf_adaloop回环)入手&… · 2026/11/3 3:24:33

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码