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.pswp.cn/diannao/72200.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72200.shtml
英文地址,請注明出處:http://en.pswp.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…