How's python Pyminizip compress_multiple work?

时间:2017-04-10 03:27:23

标签: python-3.x zipfile

My python version is 3.5 through Anaconda on Windows 10 environment. I'm using Pyminizip because I need password protected for my zip files, and Zipfile doesn't support it yet.

I am able to zip single file through the function pyminizip.compress, and the encrypt function worked as expected. However, when trying to use pyminizip.compress_multiple I always encountered a Python crash (as pictures) and I believe it's due to the problem of my bad input format.

What I would like to know is: What's the acceptable format for input argument src file LIST path? From Pyminizip's documentation:

pyminizip.compress_multiple([u'pyminizip.so', 'file2.txt'], "file.zip", "1233", 4, progress)
Args:
1. src file LIST path (list)
2. dst file path (string)
3. password (string) or None (to create no-password zip)
4. compress_level(int) between 1 to 9, 1 (more fast) <---> 9 (more compress)

It seems the first argument src file LIST path should be a list containing all files required to be zipped. Accordingly, I tried to use compress_multiple to compress single file with command:

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

and it lead to Python crash. So I try to add a full path into the args.

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

and still, it crashed again. So I think maybe I have to split the path like this

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

still got a bad luck. Any ideas?

1 个答案:

答案 0 :(得分: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')],...)

conversly:

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