主要是利用了zipfile实现文件压缩打包,简单实例代码如下:
import zipfile
with zipfile.ZipFile("archive.zip",'w') as zipf:
zipf.write("config.ini")
zipf.write("test.py")
其中的模式 w表示如果没有该文件则创建该文件,如果有该文件则覆盖。
那么如果已经存在该压缩文件,现在想往该压缩文件里面追加文件,是否可以?
实际上肯定可以的,只需要将w改成a即可。
import zipfile
with zipfile.ZipFile("archive.zip",'a') as zipf:
zipf.write("mylist.pkl")
需要注意的是,上面的代码实际上只执行了一个打包的功能,根本没有对文件进行压缩,所以打包之后的文件大小没有什么变化,这显然不是我想要的。
这就需要对ZipFile函数的具体参数有所了解
- ZipFile(filename, mode=’r’, compression=ZIP_STORED, allowZip64=True):创建或打开Zip文件。filename为文件名,mode为打开文件的模式,compression为压缩模式,allowZip64为是否支持Zip64格式。
- ZipFile.write(filename, arcname=None, compress_type=None):将文件写入Zip文件中。filename为文件名,arcname为写入Zip文件中的文件名,compress_type为压缩模式。
- ZipFile.extractall(path=None, members=None, pwd=None):将Zip文件中的所有文件解压到指定目录下。path为解压目录,members为要解压的文件列表,pwd为解压密码。
按照上面的提示,将关键代码进行修改如下:
import zipfile
with zipfile.ZipFile("archive.zip",'a',compression=zipfile.ZIP_STORED, allowZip64=True) as zipf:
zipf.write("mylist.pkl")
结果发现,外甥打灯笼— 照舅(旧),对多个参数值进行尝试
import zipfile
with zipfile.ZipFile("archive.zip",'a',compression=zipfile.ZIP_DEFLATED, allowZip64=True) as zipf:
zipf.write("/root/mylist.pkl")
也就是将压缩模式改变之后发现,压缩结果有显著提升。而将allowZip64修改为False则发现与True的时候,压缩大小没有任何改变。
综上所述,还是需要将压缩模式设置为zipfile.ZIP_DEFLATED
原本写到这里就应该结束了,但是笔者将上面代码压缩的程序解压了一下发现 压缩包里面的文件是带有路径的。
如果想不带有路径,直接就是该文件名,则可以使用如下代码:
zipf.write(filename=”/root/mylist.pkl”,arcname=”mylist.pkl”) 替换zipf.write(“/root/mylist.pkl”) 即可达到上述目的。