Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ZipFile中的ZipFile(Python)_Python_Python 3.x_Shutil - Fatal编程技术网

ZipFile中的ZipFile(Python)

ZipFile中的ZipFile(Python),python,python-3.x,shutil,Python,Python 3.x,Shutil,背景 我的主目录中有一个名为delivery\u content的目录。在该目录中有两个文件夹content\u 123和content\u 456。每个目录包含一个文本文件。因此,总体结构如下所示 -delivery_content -content_123/ -content_123.txt -content_456/ -content_456.txt 我在写代码,当给它一个目录时,它将压缩它的所有内容 代码 import os import shutil from pat

背景

我的主目录中有一个名为
delivery\u content
的目录。在该目录中有两个文件夹
content\u 123
content\u 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")
因此,对于上面给定的代码,我希望在
下载目录中看到foo_todays_date.zip,当我解压缩它时,我希望看到以下内容

 -content_123/
   -content_123.txt
 -content_456/
   -content_456.txt
然而,我看到了以下几点

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

有什么方法可以避免在我的zipfile中使用.zip文件吗?

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

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

您可以在以后将压缩文件移动到下载目录中。

让我困惑的是,哪个参数指定了压缩文件的输出位置?你为什么用“.”?这表明了什么?第一个参数指定了zip文件的存放位置。“.”表示放在下载目录上方的目录中。我只是随意选择了那个位置。在你的环境中可能有一个更好的地方,但只有你自己知道。