我想要压缩的文件夹中有一系列文本文件。我压缩该文件夹并生成一个 zip 文件。
当我以编程方式调用 zip 文件时,出现错误:
BadZipFile: File is not a zip file
。
我一直在使用这段代码测试压缩目录:
import zipfile
print (zipfile.is_zipfile("~/path/to/zipfile.zip") )
[output]:false
我什至尝试使用此代码以编程方式创建一个新的压缩目录,并尝试上面的 zipfile 检查器代码,但也从中得到 False:
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))
zipf = zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('~/Desktop/cleaned_files_2', zipf)
zipf.close()
我做错了什么,我没有生成有效的压缩目录?
总结评论。 您提供的 python 代码看起来不错,并且您说将 zip 文件往返到 s3 显示它没有被损坏。
剩下的问题是为什么会出现错误
BadZipFile: File is not a zip file
。
如果您需要进一步的帮助,您可以尝试提供一个可重现的示例来说明问题。我怀疑它与您正在运行的 haystack.utils API 一起使用(在您的评论中引用),但这不是我知道的模块。
以下是我为解决烦人的 macOS 问题而采取的一些步骤。
.bashrc
或 .zshrc
)。例如:nano ~/.bashrc
zipar() {
if [ "$#" -ne 2 ]; then
echo "Usage: zipar <name_of_file.zip> <path/to/folder>"
return 1
fi
zip -r "$1" "$2" -x "*.DS_Store" -x "__MACOSX"
}
nano
中,使用 Ctrl+O
保存并使用 Ctrl+X
退出)。现在,您可以在终端中使用
zipar
命令通过指定 .zip
文件的名称和文件夹路径来创建 .DS_Store
文件(不包括 __MACOSX
和 .zip
)。例如:
zipar my_compressed_file.zip path/to/folder
这将在指定目录中创建一个
my_compressed_file.zip
,仅此而已。
重要:
.DS_Store(桌面服务存储)是一个隐藏文件,包含其封闭文件夹的属性,例如图标大小显示。 __MACOSX 文件夹是在 zip 过程中创建的,包含有关压缩文件的元数据。