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

Posted

技术标签:

【中文标题】如何在mac上正确压缩文件以通过python从s3解压缩?【英文标题】:How to zip files properly on mac for unzipping via python from s3? 【发布时间】:2021-07-10 16:14:26 【问题描述】:

我要压缩的文件夹中有一系列文本文件。我压缩文件夹并生成一个 zip 文件。

当我以编程方式调用 zipfile 时出现错误: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 程序中测试您创建的压缩文件。例如zip -t Zipped_file.zip 输出什么? @pmqs 当我运行您的线路时,我在终端中收到此错误:zip error: Invalid command arguments (invalid date entered for -t option - use mmddyyyy or yyyy-mm-dd)。还有什么我可以做的测试吗? 对不起,我的错字我的意思是zip -T Zipped_file.zip。也可以试试unzip -t Zipped_file.zip @pmqs 上面的 python 代码正在生成一个空的 zip 文件。我回去手动创建了一个 zip 文件。我运行了你的两条线并得到了这个:zip -T cleaned_files_2.zip test of cleaned_files_2.zip OK unzip -T cleaned_files_2.zip Updated time stamp for cleaned_files_2.zip. 我在第一段代码中将cleaned_files_2.zip 运行到 zipfile 检查器中,仍然得到FALSE @pmqs 我在原始函数中硬编码了文件路径,并传回了 zipfile 以检查它是否是真正的 zipfile,这次我得到了一个 TRUE。现在正在试验,看看它是否能解决问题。 【参考方案1】:

总结 cmets。您提供的 python 代码看起来不错,并且您说将 zip 文件往返传输到 s3 表明它没有被损坏。

这就留下了为什么您会收到错误BadZipFile: File is not a zip file 的问题。

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

【讨论】:

以上是关于如何在mac上正确压缩文件以通过python从s3解压缩?的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3 文件如何正确存储图像和图像压缩

python gzip文件在内存中并上传到s3

如何通过BetterZip筛选过滤压缩文件?

如何在 python 中使用 S3TC/DXT 算法压缩 PNG 图像?

如何使用 Python Jupyter Notebook 通过 KMS 加密从 S3 读取文件

BetterZip Mac版:如何筛选过滤压缩文件?