Как архивировать, распаковывать, создавать и извлекать файлы с помощью Python

В этом сообщении блога мы узнаем, как распаковывать и архивировать файлы с помощью Python. Будет полезно узнать, хотите ли вы распаковать zip-файл без использования внешнего программного обеспечения или хотите автоматизировать процесс для нескольких zip-файлов.

Для этого воспользуемся встроенным в Python модулем zipfile. Так что нам просто нужно импортировать его в наши скрипты вот так.

import zipfile

Извлечение или распаковка из zip-файла

Первый шаг — открыть файл. Мы можем сделать это с помощью класса ZipFile. Мы передали классу ZipFile первый аргумент в виде имени файла с путем, который вы хотите извлечь, если этот файл находится в текущей папке, в которой запущен скрипт Python, то достаточно одного имени файла. Затем мы передали второй аргумент «r», так как мы хотим открыть файл, используя разрешение на чтение, которое мы хотим извлечь.

myzip = zipfile.ZipFile('file.zip','r')

Если мы хотим, чтобы все его содержимое было из zip-файла с именем file.zip. Мы будем использовать функцию extractall() и переданное имя папки, которая будет создана в текущей папке, и все файлы будут извлечены в эту папку.

myzip.extractall('Foldername')

Или, если вы хотите извлечь один конкретный файл из file.zip, то для этого мы используем функцию extract() и передаем имя файла этого конкретного файла. Это извлечет этот файл в текущий каталог.

myzip.extract('filename.txt')

На последнем шаге мы закрываем файл с помощью функции close().

myzip.close()

Важно закрыть файл, так как он может быть поврежден или испорчен, если вы оставите его открытым. Если вы не хотите каждый раз открывать и закрывать файл. Вы можете использовать с менеджером контекста, чтобы открыть файл, который автоматически закроет файл после выполнения. Это также уменьшит количество строк.

with zipfile.ZipFile('file.zip','r') as myzip:
	myzip.extractall('Foldername')

Если у zip-файла есть пароль, то вы должны передать пароль функции setpassword() перед извлечением или вы можете передать его функциям extract() и extractall() с аргументом pwd. Поскольку функции требуется пароль в байтовой строке, вы должны передать его как b'password или как str.encode('password').

with zipfile.ZipFile('file.zip','r') as myzip:
	myzip.setpassword(b'password')
	myzip.extractall('Foldername')

Или вы можете сделать это.

with zipfile.ZipFile('file.zip','r') as myzip:
	myzip.extractall('Foldername',pwd=b'password')

Создание файла zip-архива

Теперь создание файла zip-архива будет похоже на распаковку, но здесь нам нужно открыть файл в режиме записи. Мы будем использовать «w» в качестве второго аргумента для открытия файлов в режиме записи. А затем используйте функцию write(), в которой мы передали имя файла, который мы хотим записать в zip-файл.

with zipfile.ZipFile('file.zip','w') as myzip:
	myzip.write('file1.txt')

Чтобы добавить несколько файлов, мы должны добавить несколько операторов записи с разными именами файлов, как показано ниже.

with zipfile.ZipFile('file.zip','w') as myzip:
	myzip.write('file1.txt')
	myzip.write('file2.png')

К сожалению, с помощью модуля zipfile вы можете извлечь zip-файл только с паролем, но не можете создать зашифрованный zip-файл с паролем. Вот и все для этого поста, дайте мне знать, если вам понравилась эта статья или у вас есть какие-либо вопросы.

Вывод

Спасибо за чтение. Чтобы узнать больше о модуле zipfile и его параметрах, вы можете ознакомиться с их документами.