Язык программирования Python

Сжатие и извлечение архивов в Python

Если вы давно пользуетесь компьютером, то наверняка сталкивались с файлами с расширением zip. Это специальные файлы, которые содержат сжатое содержимое многих других файлов, папок и подпапок, что делает их очень полезными для передачи файлов через Интернет. Знаете ли вы, что для сжатия и извлечения файлов можно использовать Python?

В этом уроке я покажу вам, как использовать модуль zipfile в Python для извлечения или сжатия как отдельных файлов, так и нескольких одновременно.

Сжатие отдельных файлов

Это очень просто и не требует большого количества кода. Начнем с импорта модуля zipfile. Откроем zip-файл в режиме записи, установив вторым параметром значение ‘w’. Первый параметр – это путь к самому файлу. Вот код, который вы можете использовать:

import zipfile jungle_zip = zipfile.ZipFile('C:\Files\doc.zip', 'w') jungle_zip.write('C:\Files\doc.pdf', compress_type=zipfile.ZIP_DEFLATED) jungle_zip.close()
Code language: JavaScript (javascript)

При архивации файлов можно определить различные методы сжатия. Новые методы BZIP2 и LZMA были добавлены в Python в версии 3.3, но есть инструменты, которые не поддерживают эти два метода. Поэтому безопаснее всего использовать метод DEFLATED.

Сжатие нескольких файлов

Это немного сложнее, так как необходимо перебрать все файлы. Следующий код должен сжать все pdf-файлы в заданной папке:

import os import zipfile fantasy_zip = zipfile.ZipFile('C:\Files\archive.zip', 'w') for folder, subfolders, files in os.walk('C:\Files'): for file in files: if file.endswith('.pdf'): fantasy_zip.write(os.path.join(folder, file), os.path.relpath(os.path.join(folder,file), 'C:\Files'), compress_type = zipfile.ZIP_DEFLATED) fantasy_zip.close()
Code language: JavaScript (javascript)

Мы импортировали модуль os и использовали его метод walk() для проверки всех файлов и подпапок внутри нашей исходной директории. Я сжимаю только файлы pdf в каталоге. Вы можете создавать различные архивы для каждого формата с помощью операторов if.

Если вы не хотите сохранять структуру каталогов, вы можете собрать все файлы вместе с помощью следующей строки:

fantasy_zip.write(os.path.join(folder, file), file, compress_type = zipfile.ZIP_DEFLATED)

Метод write() поддерживает три параметра. Первый параметр – имя сжимаемого файла. Второй параметр является необязательным и позволяет указать другое имя файла для сжатого файла. Если ничего не указано, используется исходное название.

Распаковка всех файлов

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

import zipfile fantasy_zip = zipfile.ZipFile('C:\Files\archive.zip') fantasy_zip.extractall('C:\Files\Docs') fantasy_zip.close()
Code language: JavaScript (javascript)

Распаковка отдельных файлов

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

import zipfile fantasy_zip = zipfile.ZipFile('C:\Files\archive.zip') fantasy_zip.extract('New Doc.pdf', 'C:\Files\Docs') fantasy_zip.close()
Code language: JavaScript (javascript)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *