Как заархивировать папку в python с паролем? - PullRequest
0 голосов
/ 06 февраля 2020

С помощью pyminizip я могу заархивировать файл с паролем в python:

filepath=r"C:\Users\xxx\Desktop\myFolder\file.txt"

import pyminizip
pyminizip.compress(filepath, None,"output.zip", "password", 0)

Но как мне сжать всю папку 'myFolder' в файл zip с паролем? Я попытался удалить имя файла из пути, но он выдает ошибку

OSError: error in opening C:\Users\xxx\Desktop\myFolder for reading

РЕДАКТИРОВАТЬ:

Приведенная ниже ссылка имеет функцию, которая будет архивировать каталог. Но он не будет добавлять пароль.

https://www.calazan.com/how-to-zip-an-entire-directory-with-python/

Если кто-нибудь может дать мне знать, можно ли добавить пароль в существующий zip-файл, это будет решить мою проблему. Это возможно?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Я наконец смог выполнить sh шифрование всего каталога (включая всю структуру подпапок и файлов), используя библиотеку «pyzipper», предложенную Anupam Chaplot.

Вот решение:

def zip_folderPyzipper(folder_path, output_path):
    """Zip the contents of an entire folder (with that folder included
    in the archive). Empty subfolders will be included in the archive
    as well.
    """
    parent_folder = os.path.dirname(folder_path)
    # Retrieve the paths of the folder contents.
    contents = os.walk(folder_path)
    try:
        zip_file = pyzipper.AESZipFile('new_test.zip','w',compression=pyzipper.ZIP_DEFLATED,encryption=pyzipper.WZ_AES)
        zip_file.pwd=b'PASSWORD'
        for root, folders, files in contents:
            # Include all subfolders, including empty ones.
            for folder_name in folders:
                absolute_path = os.path.join(root, folder_name)
                relative_path = absolute_path.replace(parent_folder + '\\',
                                                      '')
                print ("Adding '%s' to archive." % absolute_path)
                zip_file.write(absolute_path, relative_path)
            for file_name in files:
                absolute_path = os.path.join(root, file_name)
                relative_path = absolute_path.replace(parent_folder + '\\',
                                                      '')
                print ("Adding '%s' to archive." % absolute_path)
                zip_file.write(absolute_path, relative_path)

        print ("'%s' created successfully." % output_path)

    except IOError as message:
        print (message)
        sys.exit(1)
    except OSError as message:
        print(message)
        sys.exit(1)
    except zipfile.BadZipfile as message:
        print (message)
        sys.exit(1)
    finally:
        zip_file.close()

Поскольку я новичок в python, я не могу объяснить код подробно. Вот ссылки:

https://pypi.org/project/pyzipper/

https://www.calazan.com/how-to-zip-an-entire-directory-with-python/

Для извлечения сгенерированного ZIP-файла в windows:

Щелкните правой кнопкой мыши -> Разархивировать (Зашифровано)

Если вы непосредственно нажмете опцию Извлечь все, тогда будет выдано сообщение об ошибке

0 голосов
/ 06 февраля 2020

Попробуйте: сначала проверьте здесь , пожалуйста, для pynzip. После этого попробуйте.

import pyminizip as pyzip

compression = 8
pyzip.compress("test.txt", "test.zip", "Pswrd", compression)
...