自动备份文件及文件夹
我们在写软件或做其他项目的时候,总是担心文件被损坏或者丢失,所以每次改完程序都会把整个文件夹压缩一个ZIP文件,在压缩ZIP文件的时候,我希望保存不同的版本,希望ZIP文件名每次创建时都有变化,我记录修改了什么。
列如 backup project_1.zip,backup_project_2.zip 等等,这些都可以用手工完成,但每次可能不小心弄错了ZIP文件的编号,或者忘记了去备份。我们写一个简单的程序来完成这烦人的工作。
实现思路
第一步:定义一个backupTozip( )函数,它只接收一个参数,即folder,这个参数是一个字符串路径,指向需要备份的文件夹。该函数将决定它创建什么样的文件名,遍历folder文件夹,将每一个文件夹的子文件和文件添加到ZIP文件中。
1.命名这个ZIP文件,使用folder的绝对路径得到压缩ZIP的名字,列如:文件夹是"/Users/zou/Desktop/zip",那么ZIP文件的名称应该是 zip_N.zip,第一次运行程序时N=1,以此类推。
2.通过检查zip_1.zip是否存在,再检查zip_2.zip是否存在,以此类推,确定N是什么,用number变量来表示N,在循环内不断增加,并调用 os.path.exsits( )来检查文件是否存在,第一个不存在的文件名会导致循环break。python学习关注我们企鹅qun: 8393 83765 各类入门学习资料免费分享哦!
代码如下:
importos
importzipfile
defbackupToZip(folder):
Backup the entire contents of "folder" into a zip file.
folder= os.path.abspath(folder) # make sure folder is absolute
Figure out the filename this code should used based on
what files already exist.
number= 1
whileTrue:
zipFilename= os.path.basename(folder) +'_'+str(number) +'.zip'
ifnotos.path.exists(zipFilename):
break
number= number+1
第二步:创建ZIP文件
既然新的ZIP文件的文件名保存zipFilename 变量中,你就可以调用zipfile.ZipFile( ),来创建ZIP文件,一定要传入'w'作为第二个参数,这样文件以写模式打开。
# Create the zip file.
print('Creating %s...'%(zipFilename))
backupZip= zipfile.ZipFile(zipFilename, 'w')
第三步:遍历目录树并添加到ZIP文件
使用os.walk( )函数,列出文件夹以及自文件夹的每个文件,for循环中使用os.walk( ),在每次迭代中,它返回这次迭代的文件夹名称 , 这文件夹的子文件夹,以及文件夹的文件名。
第一个for循环将文件夹添加到ZIP文件,第二个for循环将遍历filenames列表中的每个文件,将每个文件也添加到ZIP文件中,生成的备份除外。
# Walk the entire folder tree and compress the files in each folder.
forfoldername, subfolders, filenamesinos.walk(folder):
print('Adding files in %s...'%(foldername))
Add the current folder to the ZIP file.
backupZip.write(foldername)
Add all the files in this folder to the ZIP file.
forfilenameinfilenames:
iffilename.startswith(os.path.basename(folder) +'_') andfilename.endswith('.zip'):
continue # don't backup the backup ZIP files
backupZip.write(os.path.join(foldername, filename))
backupZip.close()
print('Done.')
源码如下:
程序运行后的结果:
注:记得关注我们哦,如果你跟我一样都喜欢python,想成为一名优秀的程序员,也在学习python的道路上奔跑,欢迎你加入python学习群:839383765 群内每天都会分享最新业内资料,分享python免费课程,共同交流学习,让学习变(编)成(程)一种习惯!
领取专属 10元无门槛券
私享最新 技术干货