如何在 mac 上正确压缩文件,以便通过 python 从 s3 解压缩?

问题描述 投票:0回答:2

我想要压缩的文件夹中有一系列文本文件。我压缩该文件夹并生成一个 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-3.x amazon-web-services amazon-s3 zip
2个回答
2
投票

总结评论。 您提供的 python 代码看起来不错,并且您说将 zip 文件往返到 s3 显示它没有被损坏。

剩下的问题是为什么会出现错误

BadZipFile: File is not a zip file

如果您需要进一步的帮助,您可以尝试提供一个可重现的示例来说明问题。我怀疑它与您正在运行的 haystack.utils API 一起使用(在您的评论中引用),但这不是我知道的模块。


0
投票

以下是我为解决烦人的 macOS 问题而采取的一些步骤。

  1. 打开 shell 配置文件(如
    .bashrc
    .zshrc
    )。例如:
nano ~/.bashrc
  1. 在文件末尾添加以下函数:
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"
}
  1. 保存文件并退出编辑器(在
    nano
    中,使用
    Ctrl+O
    保存并使用
    Ctrl+X
    退出)。
  2. 重新加载终端以应用更改:

现在,您可以在终端中使用

zipar
命令通过指定
.zip
文件的名称和文件夹路径来创建
.DS_Store
文件(不包括
__MACOSX
.zip
)。例如:

zipar my_compressed_file.zip path/to/folder

这将在指定目录中创建一个

my_compressed_file.zip
,仅此而已。

重要:

.DS_Store(桌面服务存储)是一个隐藏文件,包含其封闭文件夹的属性,例如图标大小显示。 __MACOSX 文件夹是在 zip 过程中创建的,包含有关压缩文件的元数据。

© www.soinside.com 2019 - 2024. All rights reserved.