如何用python写个自动备份软件?进来了解一下!

自动备份文件及文件夹

我们在写软件或做其他项目的时候,总是担心文件被损坏或者丢失,所以每次改完程序都会把整个文件夹压缩一个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免费课程,共同交流学习,让学习变(编)成(程)一种习惯!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190221A0SHIF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券