python将文件夹打包成zip并保存历史版本
2020-07-02 22:12
78 查看
#!python3 #将一个文件夹及以下的所有文件打包成zip文件 import zipfile,os,re def backup2zip(floder,backupfilename): #floder:要打包的文件夹;backupfilename:指定文件名 hisname = re.compile(backupfilename + '(_)?(\\d+)?' +'.zip') floder = os.path.abspath(floder) num = [1] allFiles = os.listdir(os.getcwd()) #历史备份文件名列表 for i in allFiles: mo = hisname.search(i) if mo: num.append(int(mo.group(2)) + 1) backupfilename = backupfilename + '_' + str(num[-1]) + '.zip' f = zipfile.ZipFile(backupfilename,'w') #c创建一个zip对象 for floderName, subFolders, fileNames in os.walk(floder): f.write(floderName) for subFolder in subFolders: f.write(os.path.join(floderName,subFolder)) for fileName in fileNames: f.write(os.path.join(floderName,fileName)) f.close() #backup2zip('.\\zipexample','backupfile')
期间遇到两个问题,一个是
[Errno 13] Permission denied,这个问题原因在
zipfile.ZipFile(path)的路径参数中必须指定文件名后缀
.zip,否则报错如下:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\zipfile.py", line 1249, in __init__ self.fp = io.open(file, filemode) PermissionError: [Errno 13] Permission denied: 'zipexample'
另外
zipfile.ZipFile(),默认打开方式是读,即
'r',要创建zip文件时需要修改成
'w',否则非找不到路径。其次write()在写入过程中会将指定路径全部写入zip文件。
关于路径是从根目录开始写的,否则会读取不到。比如我这个程序放在E盘,我想压缩D盘的一个文件:
... floder = os.path.abspath(floder) print(floder) ... #backup2zip('.\\zipexample','hi') backup2zip('.\\..\\..\\..\\..\\..\\d:\\myfiles\\hi','hi')
输出结果是:
#E:\python\aliyunclass\newdir\projects\zipexample E:\d:\myfiles\hi
第二行会读取不到文件,直接输入D盘文件的绝对地址就好了。写入的时候会从该根目录开始将路径上的所有文件夹全部
另一个错误是
IndentationError: expected an indented block,原因在把if或else里的语句全部注释了。先将逻辑块占位就解决了。
然后将在
main.py中引用这个模块后报错。
import backup2zip backup2zip('zipexample','backupfile') -------------------------------------------- Traceback (most recent call last): File "main.py", line 3, in <module> backup2zip('zipexample','backupfile') TypeError: 'module' object is not callable
原因是忘记引用需要模块名加方法,即
backup2zip.backup2zip()。
还有一点值得注意的是,要记得关闭ZipFile对象,否则会出现无法读取或解压的情况,如下
f = zipfile.ZipFile('zipexample.zip') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\zipfile.py", line 1267, in __init__ self._RealGetContents() File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\lib\zipfile.py", line 1334, in _RealGetContents raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file
该文件一直处于编辑中的状态,压缩软件自然也无法读取。
关于引用模块后,生成的
__pycache__文件夹的作用参考:pyhton中__pycache__文件夹的产生与作用
相关文章推荐
- Python打包文件夹(zip/tar/tar.gz)
- Python打包文件夹的方法小结(zip,tar,tar.gz等)
- Python 利用os 获取文件夹中每一张图片的名字 并保存至 txt
- Python Fabric 模块 打包上传文件及检查 批量安装lnmp环境 版本发布及回滚
- 使用pyinstaller 2.1将python打包并添加版本信息和图标
- WordPress禁止版本修订历史、自动保存和自动草稿最新方法汇总
- 【Python】3.6版本py文件打包生成exe
- php zip 打包文件夹
- python使用openCV遍历文件夹里所有视频文件并保存成图片
- pyqt5+python3.5版本带有卷积神经网络模型的程序打包过程
- python根据小的文本路径去找大的图像文本路径,保存到另外一个文件夹
- java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
- python tools:找出两个文件夹里相同的文件,保存输出
- win10 平台打包python项目(含有依赖文件夹)为部署文件包(包含exe)
- java中生成30万的excel(采用多个excel,每个上面放6万数据,最后打包zip保存)
- php zip 打包文件夹
- 实锤!再也不用纠结版本的选择了,Python2.7 即将退出历史舞台
- python程序-文件夹压缩打包
- python用zipfile模块打包文件或是目录、解压zip文件实例
- Python爬虫—批量爬取网站图片和音频—并按页码保存在对应文件夹