python实践项目十:zipfile模块-将一个文件夹备份到一个 ZIP 文件

描述:将指定路径下的某文件夹备份到一个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文件

运行结果

 

posted on 2019-07-09 19:55  白居不易1101  阅读(827)  评论(0编辑  收藏  举报