描述:将指定路径下的某文件夹备份到一个zip文件
代码:
1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 # backupToZip - Copies an entire folder and its contents into a ZIP file whose filename increments 4 import zipfile,os 5 6 def backupToZip(folder): #folder参数为需要备份的文件夹的路径 7 folder=os.path.abspath(folder) #返回一个绝对路径 8 number=1 9 while 1: 10 #os.path.basename():返回path最后的文件名 11 #创建一个zip文件名 12 zipPath='F:\' #定义zip文件存储路径 13 zipFileName=zipPath+os.path.basename(folder)+'_'+str(number)+'.zip' 14 #用于寻找一个还没使用过的zip文件名,如果存在则继续寻找,如果不存在则停止寻找,并得到一个之前不存在的zip文件名 15 #os.path.exists():判断括号里的文件/文件路径是否存在 16 if not os.path.exists(zipFileName): 17 break 18 number+=1 19 #创建zip文件 20 print 'Creating %s...' %(zipFileName) 21 #创建一个zip文件,文件名为zipFileName,’w'表示压缩 22 backupZip=zipfile.ZipFile(zipFileName,'w') 23 #os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下, 24 #每次迭代中,它将返回这次迭代当前的文件夹名称、 这个文件夹中的子文件夹, 25 # 以及这个文件夹中的文件名 26 #参考链接:https://www.runoob.com/python/os-walk.html 27 for foldername,subfolders,filenames in os.walk(folder): 28 print 'Adding files in %s...' %(foldername) 29 #将文件夹名写入zip 30 #如果向 ZipFile 对象的 write()方法传入一个路径,Python 就会压缩该路径所指的文件,将它加到 ZIP 文件中。write()方法的第一个参数是一个字符串,代表要添加的文件名 31 backupZip.write(foldername) #将需备份的文件夹的各层文件夹(从最外层到最内层)放入zip 32 #循环遍历,将每一个文件写入zip 33 for filename in filenames: 34 # 保证之前生成的zip文件不会被添加到新的zip文件中 35 newBase=os.path.basename(folder)+'_' #获取需备份的文件夹的文件名 36 if filename.startswith(newBase) and filename.endswith('.zip'): 37 continue 38 #将各层文件夹内的文件按照路径映射关系写入zip 39 backupZip.write(os.path.join(foldername,filename)) 40 backupZip.close() 41 print 'Done!' 42 43 backupToZip('F:\file') #调用函数,参数为文件夹路径字符串,此路径及文件夹需真实存在,否则会返回一个空的zip文件
运行结果: