Python将多个目录压缩成一个zip文件

lea*_*ing 5 python zip archive

我有一个顶级目录ds237,下面有多个子目录,如下所示:

sub01-01.zip: contain sub-01 to sub-07

我正在尝试根据zip文件的大小从ds237创建多个zip文件(具有正确的zip名称). sub08-13.zip : it contains sub08 to sub-13 [sub-01,sub-02, sub-03, sub-04, sub-05]

我编写了一个逻辑,用于创建子目录列表def zipit([list of subdirs], 'path/to/zipfile/sub*-*.zip'):.我创建了列表,以便列表中所有子目录的总大小不应超过5GB.

我的问题是:我如何编写一个函数来将这些子目录(在列表中)压缩成具有正确名称的目标zip文件.基本上我想写一个函数如下:

ds237

我linux通常通过以下方式实现:'zip -r compress/sub01-08.zip ds237/sub-0 [1-8]'

Jer*_*err 9

查看/sf/answers/129858291/,您可以重复使用该答案的功能将目录添加到ZipFile.

import os
import zipfile


def zipdir(path, ziph):
    # ziph is zipfile handle
    for root, dirs, files in os.walk(path):
        for file in files:
            ziph.write(os.path.join(root, file),
                       os.path.relpath(os.path.join(root, file),
                                       os.path.join(path, '..')))


def zipit(dir_list, zip_name):
    zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
    for dir in dir_list:
        zipdir(dir, zipf)
    zipf.close()
Run Code Online (Sandbox Code Playgroud)

zipit应使用预先分块列表和给定名称调用该函数.如果要使用编程名称(例如"path/to/zipfile/sub{}-{}.zip".format(start, end)),可以使用字符串格式.