是否有将目录添加到 zip 文件的功能?

Is there a function for adding a Directory to an zip file?

我正在尝试将包含内容的目录添加到 zip 存档中。 zip 存档已存在。 我没有找到任何具有这种功能的库。你知道有这样功能的图书馆吗?

您可以使用标准模块zipfile


要添加到现有 .zip,您可以在 append more ("a")

中打开
zipfile.ZipFile('output.zip', 'a')

要添加目录中的所有文件,您需要 os.listdir(directory)for 循环分别添加每个文件。

如果您有子文件夹,那么它可能需要 os.walk(directory) 而不是 os.listdir(directory)

    folder = 'test'

    with zipfile.ZipFile('output.zip', 'a') as myzip:

        for filename in sorted(os.listdir(folder)):

            fullpath = os.path.join(folder, filename)

            myzip.write(fullpath) #, arcname=filename)

如果你想在 .zip 中创建 folder 那么你必须使用名称 folder/filename 作为 name(你不能去 folder使用 os.chdir() 并添加 filename) 或者您可以使用 arcname="folder/filename".

创建它

例如,您可以使用当前时间在 zip 中创建新文件夹。

    src_folder = 'test'
    
    date = datetime.datetime.now()
    dst_folder = date.strftime('%H-%m-%S')   # one folder 
    #dst_folder = date.strftime('%H/%m/%S')  # many folders separated by `/`

    with zipfile.ZipFile('output.zip', 'a') as myzip:

        for filename in sorted(os.listdir(src_folder)):

            src_fullpath = os.path.join(src_folder, filename)
            dst_fullpath = os.path.join(dst_folder, filename)

            myzip.write(src_fullpath, arcname=dst_fullpath)

顺便说一句:

用于检查在 zip 文件中创建了什么的代码

    with zipfile.ZipFile('output.zip', 'r') as myzip:
        for item in myzip.filelist:
            print(item.filename)