Архивирование — это элегантный способ сжатия нескольких файлов и объединения их в один. Это экономит не только место для хранения, но и пропускную способность при передаче файла по сети. Одной из лучших особенностей zip является то, что он работает на всех основных платформах: Windows, Linux и Mac.
Zip использует сжатие без потерь, поэтому он сохраняет все данные при сжатии и распаковке. Вы также можете зашифровать и расшифровать свои zip-файлы.
С таким количеством функций, которые нужно изучить, узнайте, как вы можете читать, архивировать и распаковывать файлы с помощью модуля Python zipfile.
Что такое модуль zipfile?
Вы можете использовать стандартный модуль zipfile для управления zip-файлами с помощью Python. С помощью этого модуля вы можете открывать и читать zip-файлы, читать их метаданные, создавать zip-файл, сжимать его и распаковывать файлы. Доступны три метода сжатия: Deflate, Bzip2 и LZMA.
Одной из вещей, которой не хватает модулю, является возможность обработки многодисковых файлов, но он поддерживает расширение ZIP64. Он также может расшифровывать zip-архивы, но не шифровать их. Используя модуль zipfile, вы можете получить метаданные zip-файла, такие как дата и время модификации. Вы также можете получить такие сведения, как операционная система, использованная для создания файла, версия zip и размер файла как в сжатом, так и в несжатом формате.
Как архивировать файлы с помощью Python
Вы можете заархивировать несколько файлов в один архив, используя модуль Python zipfile. Импортировать Zip-файл модуль из zip-файл package для выполнения необходимых zip-операций. Также импортировать в Операционные системы модуль для выбора и сохранения файлов.
Определить функцию get_all_file_paths(). Он должен принимать параметр каталога, который содержит путь к папке, содержащей файлы для архивирования.
Инициализируйте пустой список, в котором будет храниться список путей к файлам. Используйте цикл for, чтобы получить полное содержимое целевого каталога, используя os.walk() функция. Эта функция выбирает имена файлов в дереве каталогов, перемещаясь по нему сверху вниз или снизу вверх. Для каждого каталога функция возвращает три кортежа, содержащие корень, каталоги и файлы.
Корень — это строка, содержащая полный путь к каталогу. Список каталогов включает все подкаталоги, содержащиеся в каталоге. Список файлов содержит все файлы, присутствующие в каталоге.
Внутри цикла объявите еще один цикл для перебора списка файлов. Использовать os.path.join() Функция для объединения имени каталога с каждым именем файла для создания полного пути. Затем добавьте это полное имя файла к списку, который вы создали ранее. После завершения этой операции верните список путей к файлам.
# импортируем необходимые модули
от zip-файл Импортировать Zip-файл
Импортировать Операционные системы# создаем функцию для получения всех путей к файлам
дефget_all_file_paths(каталог):
# инициализируем пустой список для хранения путей к файлам
пути_файла = []# перемещаемся по файлам
длякорень, каталоги, файлывОперационные системы.ходить(каталог):
для имени файла в файлах:
# соедините корень и имя файла, чтобы создать полный путь к файлу
путь к файлу = os.path.join (корень, имя файла)
пути к файлам.добавлять(Путь к файлу)
# возвращаем все пути к файлам
возвращаться пути к файлам
Сохраните путь к папке, содержащей файлы, которые вы хотите заархивировать, в переменной с именем directory. Вызовите функцию, get_all_file_paths() который вы создали ранее, и сохраните возвращаемое им значение в пути к файлам.
Отобразите сообщение для пользователя, чтобы сообщить ему, что это файлы, которые программа заархивирует. Переберите файлы и отобразите их имена.
Передайте имя, которое вы хотите, чтобы ваш zip-файл имел вместе со спецификацией, что программа возвращает файл с возможностью записи, используя оператор with для обработки исключений. Переберите каждый файл и используйте функцию write() над файлом, доступным для записи, в zip-файл.
По завершении операции выведите сообщение, поясняющее, что программа успешно заархивировала все файлы.
# путь к папке, которую вы хотите заархивировать
каталог = './pythonzip'# вызов функции для получения всех путей к файлам в каталоге
file_paths = get_all_file_paths (каталог)# печать списка всех файлов, которые вы хотите заархивировать
Распечатать('Список файлов, которые будут заархивированы:')для file_name в file_paths:
Распечатать(имя файла)# запись файлов в zip-архив
с Zip-файл('мой_файл.zip', 'ж') как почтовый индекс:
# записываем каждый файл по одному
для файла в file_paths:
молния.писать(файл)
Распечатать(«Все файлы заархивированы!»)
Как распаковать файлы с помощью Python
Реализация распаковки файлов с помощью модуля zipfile намного проще. Импортировать zip-файл пакет из Zip-файл модуль и сохраните имя zip-файла, который вы хотите извлечь, в переменной. Используйте оператор with для обработки исключений и открытия файла, который вы хотите извлечь, в режиме чтения. Использовать каталог печати() функция для отображения оглавления файлов, присутствующих в zip.
Отобразите сообщение о ходе выполнения извлечения файлов и используйте извлечь все() функция для извлечения содержимого zip-файла в текущий рабочий каталог. Кроме того, вы можете включить параметр пути, чтобы изменить путь, по которому программа извлекает файлы.
Отображение сообщения с помощью Распечатать заявление о завершении операции.
# импорт необходимых модулей
от zip-файл Импортировать Zip-файл# передать имя zip-файла, который вы хотите извлечь
имя_файла = "извлечь.zip"# открытие zip файла в режиме чтения
с ZipFile (имя_файла, 'р') как почтовый индекс:
# отображаем содержимое zip-файла
молния.printdir()
# извлечение всех файлов
Распечатать(«Выполняется извлечение...»)
молния.извлечь все()
Распечатать(«Все файлы извлечены!»)
Подробнее о zip-файлах
Zip-файлы приобрели большую популярность и используются уже несколько десятилетий. Популярные веб-сайты, такие как GitHub и Google Drive, позволяют загружать коллекцию файлов в виде zip-архива. Программа zip сжимает набор файлов в один пакет. Это отличается от такого инструмента, как tar, который упаковывает файлы вместе, но не сжимает их.
Если вы хотите зашифровать свои файлы с помощью более эффективного алгоритма, вам подойдут файлы RAR. RAR использует алгоритм AES-128, который лучше, чем алгоритм deflate, используемый zip-файлами. В конце концов, выберите тот, который лучше всего соответствует вашим потребностям.