Python Cookbook-2.29 带版本号的文件名

任务

如果你想在改写某文件之前对其做个备份,可以在老文件的名字后面根据惯例加上三个数字的版本号。

解决方案

我们需要编写一个函数来完成备份工作:

def VersionFile(file_spec, vtype='copy'):import os,shutilif os.path.isfile(file_spec):#检查'vtype'参数if vtype not in('copy','rename'):raise ValueError,'Unknown vtype %r' % (vtype,)#确定根文件名,所以扩展名不会太长n,e = os.path.splitext(file_spec)#是不是一个以点为前导的三个数字?if len(e) == 4 and e[1:].isdigit():num = 1+int(e[1:])root = nelse:num  = 0root = file_spec#寻找下一个可用的文件版本for i in xrange(num,1000):new_file = '%s.%03d' %(root,i)if not os.path.exists(new_file):if vtype =='copy':shutil.copy(file_spec,new_file)else:os.rename(file_spec,new_file)return Trueraise RuntimeError,"Can't$s%r,all names taken"%(vtype,file_spec)return False
if __name__ == '__main__':import os#创建一个test.txt文件tfn = 'test.txt'open(tfn,"w').close()#对它取3次版本print VersionFile(tfn)#输出:Trueprint VersionFile(tfn)# 输出:Trueprint VersionFile(tfn)#输出:True#删除我们刚刚生成的test.txt*文件for x in(''.'.000','.001','.002'):os.unlink(tfn + x)#展示当文件不存在时取版本操作的结果print VersionFile(tfn)#输出:Falseprint VersionFile(tfn)#输出:False

讨论

VersionFile 函数是为了确保在打开文件进行写入或更新等修改前,对已存在的目标文件完成了备份(或者重命名,由可选的第二个参数来决定)。在处理文件之前进行备份是很明智的举措(这也是一些人仍然怀念旧的 VMS操作系统的原因,这种备份是自动进行的)。实际的复制和重命名是分别由shutil.copy和 os.rename 完成的,所以唯一的问题是,怎么确定文件的名字。

一个流行的决定备份的名字的方法是使之版本化(比如,给文件名增加一个逐渐增大的数字)。本节确定文件名的方法是,首先从文件名中分解出名字根(因为有可能这已经是一个版本化的文件名了),然后在这个名字根之后添加进一步的扩展名,比如.000,.001,等等,直到以此种命名方式确定的文件名也无法对应任何一个存在的文件。注意,VersionFile 被限制为只能有1000个版本,所以需要有个归档备份的计划。在进行版本化之前,首先要确保该文件存在–不能对不存在的东西进行备份。如果文件不存在,VersionFile 函数只是简单地返回 False(如果文件存在而且函数执行无误则返回 True),所以在调用之前也无须检査文件是否存在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCF-CSP认证 202104-1灰度直方图

题目描述 思路 首先输入矩阵长度、矩阵宽度和灰度范围&#xff0c;结果数组长度可固定&#xff0c;其中的元素要初始化为0。在输入灰度值的时候&#xff0c;结果数组中以该灰度值为索引的元素值1&#xff0c;即可统计每个灰度值的数量。 代码 C版&#xff1a; #include <…

水果识别系统 | BP神经网络水果识别系统,含GUI界面(Matlab)

使用说明 代码下载&#xff1a;BP神经网络水果识别系统&#xff0c;含GUI界面&#xff08;Matlab&#xff09; BP神经网络水果识别系统 一、引言 1.1、研究背景及意义 在当今科技迅速发展的背景下&#xff0c;人工智能技术尤其是在图像识别领域的应用日益广泛。水果识别作为…

如何在网页上显示3D CAD PMI

在现代制造业中&#xff0c;3D CAD模型已成为产品设计和制造的核心。为了更有效地传达设计意图和制造信息&#xff0c;产品和制造信息&#xff08;PMI&#xff09;被嵌入到3D模型中。然而&#xff0c;如何在网页上清晰、准确地显示这些3D CAD PMI&#xff0c;成为了一个重要的技…

Git基本命令索引

GIT基本命令索引 创建代码库修改和提交代码日志管理远程操作操作分支 创建代码库 操作指令初始化仓库git init克隆远程仓库git clone 修改和提交代码 操作指令查看文件状态git status文件暂存git add文件比较git diff文件提交git commit回滚版本git reset重命名或者移动工作…

基于Selenium的Python淘宝评论爬取教程

文章目录 前言1. 环境准备安装 Python&#xff1a;安装 Selenium&#xff1a;下载浏览器驱动&#xff1a; 2. 实现思路3. 代码实现4. 代码解释5. 注意事项 前言 以下是一个基于 Selenium 的 Python 淘宝评论爬取教程&#xff0c;需要注意的是&#xff0c;爬取网站数据应当遵守…

GenBI 可视化选谁:Python Matplotlib?HTML ?Tableau?

引言 生成式 BI(Generative BI,GenBI)通过自然语言交互和自动化内容生成,革新了数据分析和商业智能(BI)领域。用户可以通过自然语言提问,GenBI 系统自动生成相应的 SQL 查询、获取数据,并以可视化图表、表格、自然语言摘要等形式呈现分析结果。 可视化是 GenBI 的关键…

java后端开发day24--阶段项目(一)

&#xff08;以下内容全部来自上述课程&#xff09; GUI&#xff1a;Graphical User Interface 图形用户接口&#xff0c;采取图形化的方式显示操作界面 分为两套体系&#xff1a;AWT包&#xff08;有兼容问题&#xff09;和Swing包&#xff08;常用&#xff09; 拼图小游戏…

vmware安装firepower ftd和fmc

在vmware虚拟机中安装cisco firepower下一代防火墙firepower threat defence&#xff08;ftd&#xff09;和管理中心firepower management center&#xff08;fmc&#xff09;。 由于没有cisco官网下载账号&#xff0c;无法下载其中镜像。使用eveng模拟器中的ftd和fmc虚拟镜像…

【Java进阶】java设计模式之单例模式

一、单例设计模式的基本概念 在 Java 编程的广阔天地里&#xff0c;单例设计模式宛如一颗璀璨的明星&#xff0c;是一种极为实用的创建型设计模式。它的核心使命是确保一个类在整个应用程序的生命周期内仅仅存在一个实例&#xff0c;并且为外界提供一个全局唯一的访问点来获取…

011 rocketmq过滤消息

文章目录 过滤消息TAG模式过滤FilterByTagProducer.javaFilterByTagConsumer.java SQL表达式过滤FilterBySQLProducer.javaFilterBySQLConsumer.java 类过滤模式&#xff08;基于4.2.0版本&#xff09; 过滤消息 消息过滤包括基于表达式过滤与基于类模式两种过滤模式。其中表达…

【心得】一文梳理高频面试题 HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别并附加记忆方法

面试时很容易遇到的一个问题—— HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别&#xff0c;其实这四个版本的发展实际上是一环扣一环的&#xff0c;是逐步完善的&#xff0c;本文希望帮助读者梳理清楚各个版本之间的区别&#xff0c;并且给出当前各个版本的应用情况&#xff0c;…

大模型部署与调优:从基础到高效优化全解析

大模型部署与调优&#xff1a;从基础到高效优化全解析 1. 引言 随着深度学习的快速发展&#xff0c;大模型&#xff08;Large Models&#xff09; 在自然语言处理&#xff08;NLP&#xff09;、计算机视觉&#xff08;CV&#xff09;、推荐系统等领域的应用日益广泛。然而&am…

小红书app复制短链,分享链接转直接可访问链接

简介&#xff1a;小红书手机app分享的链接需要点击才能获取完成链接&#xff0c;本文教大家如何通过代码的方式将xhs的短连接转化为长链接。 1.正常我们分享的链接是这样的&#xff1a; 44 小猪吃宵夜发布了一篇小红书笔记&#xff0c;快来看吧&#xff01; &#x1f606; KeA…

DeepSeek 助力 Vue3 开发:打造丝滑的弹性布局(Flexbox)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

DeepSeek开源周Day5压轴登场:3FS与Smallpond,能否终结AI数据瓶颈之争?

2025年2月28日&#xff0c;DeepSeek开源周迎来了第五天&#xff0c;也是本次活动的收官之日。自2月24日启动以来&#xff0c;DeepSeek团队以每天一个开源项目的节奏&#xff0c;陆续向全球开发者展示了他们在人工智能基础设施领域的最新成果。今天&#xff0c;他们发布了Fire-F…

SQL AnyWhere 的备份与恢复

目录 一、备份 二、恢复 1、自动恢复 2、映像恢复 3、日志恢复-指定时间点 4、日志恢复-指定偏移 5、完整的恢复流程 6、恢复最佳实践 三、其他操作 1、dbtran 2、SQL Shell 工具 数据库的安装与基本使用内容请参考博客: SAP SQLAnyWhere 17 的安装与基本使用_sql…

入门基础项目(SpringBoot+Vue)

文章目录 1. css布局相关2. JS3. Vue 脚手架搭建4. ElementUI4.1 引入ElementUI4.2 首页4.2.1 整体框架4.2.2 Aside-logo4.2.3 Aside-菜单4.2.4 Header-左侧4.2.5 Header-右侧4.2.6 iconfont 自定义图标4.2.7 完整代码 4.3 封装前后端交互工具 axios4.3.1 安装 axios4.3.2 /src…

unity学习61:UI布局layout

目录 1 布局 layout 1.1 先准备测试UI,新增这样一组 panel 和 image 1.2 新增 vertical layout 1.3 现在移动任意一个image 都会影响其他 1.3.1 对比 如果没有这个&#xff0c;就会是覆盖效果了 1.3.2 对比 如果没有这个&#xff0c;就会是覆盖效果了 1.4 总结&#xf…

翻译: 深入分析LLMs like ChatGPT 一

大家好&#xff0c;我想做这个视频已经有一段时间了。这是一个全面但面向普通观众的介绍&#xff0c;介绍像ChatGPT这样的大型语言模型。我希望通过这个视频让大家对这种工具的工作原理有一些概念性的理解。 首先&#xff0c;我们来谈谈你在这个文本框里输入内容并点击回车后背…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_add_dump

ngx_conf_add_dump 定义在src\core\ngx_conf_file.c static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename) {off_t size;u_char *p;uint32_t hash;ngx_buf_t *buf;ngx_str_node_t *sn;ngx_conf_dump_t *cd;has…