python Pyminizip compress_multiple 是如何工作的?

Posted

技术标签:

【中文标题】python Pyminizip compress_multiple 是如何工作的?【英文标题】:How's python Pyminizip compress_multiple work? 【发布时间】:2017-04-10 03:27:22 【问题描述】:

我的python版本是3.5,在Windows 10环境下通过Anaconda。我正在使用Pyminizip,因为我的 zip 文件需要密码保护,而Zipfile 尚不支持。

我可以通过函数pyminizip.compress 压缩单个文件,并且加密函数按预期工作。但是,在尝试使用pyminizip.compress_multiple 时,我总是遇到 Python 崩溃(如图),我认为这是由于我的输入格式错误造成的。

我想知道的是:输入参数src file LIST path 的可接受格式是什么?来自 Pyminizip 的文档:

pyminizip.compress_multiple([u'pyminizip.so', 'file2.txt'], "file.zip", "1233", 4, 进度) 参数: 1.src文件LIST路径(列表) 2.dst文件路径(字符串) 3. 密码(字符串)或无(创建无密码 zip) 4. compress_level(int) 1到9之间,1(更快速) 9(更压缩)

似乎第一个参数src file LIST path 应该是一个包含所有需要压缩的文件的列表。因此,我尝试使用compress_multiple 通过命令压缩单个文件:

pyminizip.compress_multiple(['Filename.txt'], 'output.zip', 'password', 4, optional)

这会导致 Python 崩溃。所以我尝试在 args 中添加完整路径。

pyminizip.compress_multiple( [os.getcwd(), 'Filename.txt'], ... )

但是,它又崩溃了。所以我想也许我必须像这样分开路径

path = os.getcwd().split(os.sep) pyminizip.compress_multiple([path, 'Filename.txt'], ...)

还是运气不好。有任何想法吗?

【问题讨论】:

好像不是输入格式的问题,而是潜在的bug...github.com/smihica/pyminizip/issues/5 【参考方案1】:

Pyminizip 需要文件中的路径名(或运行脚本的相对路径名)。

你的例子:

pyminizip.compress_multiple( [os.getcwd(), 'Filename.txt'], ... )

给出 os.getcwd() 的文件列表,然后是另一个文件“Filename.txt”。您需要使用 os.path.join() 将它们组合成一条路径

在您的文件名示例中,您将需要:

pyminizip.compress_multiple( [os.path.join(getcwd(), 'Filename.txt')],...)

反过来:

pyminizip.compress_multiple( [os.path.join(getcwd(), 'Filename1.txt'), os.path.join(getcwd(), 'Filename2.txt')],...)

【讨论】:

以上是关于python Pyminizip compress_multiple 是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu python Compression requires the (missing) zlib module

python read_compressed_file.py

python compress_objects_memory.py

python 安装 setuptools Compression requires the (missing) zlib module 的解决方案

python zlib 压缩与解压

python 安装 setuptools Compression requires the (missing) zlib module 的解决方案