ZipFile 中的 ZipFile (Python)

ZipFile inside a ZipFile (Python)

背景

我的主目录中有一些名为 delivery_content 的目录。在该目录中有两个文件夹 content_123content_456。每个目录包含一个文本文件。所以总体结构如下所示。

-delivery_content
 -content_123/
   -content_123.txt
 -content_456/
   -content_456.txt

我正在编写代码,当给定一个目录时,它将压缩所有内容。

代码

import os
import shutil
from pathlib import Path
from datetime import datetime


DOWNLOAD_DIR = Path(os.getenv("HOME")) / "delivery_content"

date = datetime.today().strftime("%Y-%m-%d")
delivery_name = f"foo_{date}"
shutil.make_archive(str(DOWNLOAD_DIR / delivery_name), "zip", str(DOWNLOAD_DIR))
print("Zipping Has Complete")

所以对于上面给定的代码,我希望在 DOWNLOAD_DIR 中看到 foo_todays_date.zip,当我解压缩它时,我希望看到以下内容

 -content_123/
   -content_123.txt
 -content_456/
   -content_456.txt

然而我看到了以下内容

有什么方法可以避免在我的 zip 文件中包含 .zip?

问题是您将 zip 文件放在您正在归档的目录中。 make_archive 可能正在创建一个空文件以验证它可以在开始归档之前写入目标。因此它将空的 zip 文件视为要存档的文件。我使用 make_archive 函数看到的唯一方法是将存档文件放在目录之外进行存档,如下所示:

shutil.make_archive(str(DOWNLOAD_DIR / ".."/ delivery_name), "zip", str(DOWNLOAD_DIR))

之后您可以随时将 zip 文件移动到 DOWNLOAD_DIR。