Как архивировать, распаковывать, создавать и извлекать файлы с помощью 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 и его параметрах, вы можете ознакомиться с их документами.