利用python实现文件压缩打包的功能

主要是利用了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”) 即可达到上述目的。

此条目发表在Ubuntu, 量化交易分类目录。将固定链接加入收藏夹。

发表回复