Рубрики
Без рубрики

модуль zipfile – Работа с ZIP-файлами на Python.

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

Автор оригинала: Pankaj Kumar.

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

Что такое zip-файл?

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

Как создать zip-файл с модулем zipfile без сжатия?

В Python мы можем создавать zip-файлы с помощью метода ZipFile() модуля zipfile. Затем мы можем добавить другие файлы в zip-файл. На следующем снимке экрана показаны файлы в папке перед созданием заархивированного файла.

Папка Перед Архивированием

Далее мы рассмотрим код. Здесь метод Zip File() принимает имя файла zip, который будет создан в качестве первого аргумента, и “w” для открытия файла в режиме записи.

Не забудьте закрыть файл в конце программы.

#import module
import zipfile

#declare filename
filename="zip_tutorial/tutorial.zip"

# create a ZipFile object by opening file
zip_obj= zipfile.ZipFile(filename,"w")

#add files to zip file
zip_obj.write("zip_tutorial/plane.xml")
zip_obj.write("zip_tutorial/sample.txt")
zip_obj.write("zip_tutorial/person.ini")

#close the file object
zip_obj.close()

На следующем рисунке показано содержимое папки после создания ZIP-файла.

Папка После Молнии

Как создать сжатый zip – файл с помощью модуля zipfile?

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

Как правило, мы используем алгоритм DEFLATED для сжатия файлов при создании zip-файлов. На следующем рисунке показано содержимое папки до создания сжатого zip-файла.

Папка Перед Архивированием 1

Чтобы создать сжатый zip-файл, нам просто нужно добавить аргумент сжатия, определяющий алгоритм сжатия. Здесь мы использовали алгоритм zip_deflated, следовательно .ZIP_DEFLATED был использован при создании объекта ZipFile.

#import module
import zipfile

#declare filename
filename="zip_tutorial/tutorial.zip"

# create a ZipFile object by opening file
zip_obj= zipfile.ZipFile(filename,"w",compression=zipfile.ZIP_DEFLATED)

#add files to zip file
zip_obj.write("zip_tutorial/plane.xml")
zip_obj.write("zip_tutorial/sample.txt")
zip_obj.write("zip_tutorial/person.ini")

#close the file object
zip_obj.close()

На следующем рисунке показано содержимое папки после создания сжатого zip-файла.

Папка После Молнии 1

Как проверить содержимое заархивированной папки, не извлекая из нее файлы?

Чтобы проверить содержимое zip-файла, мы можем использовать метод namelist() модуля zipfile|/.

Здесь name list() метод возвращает список имен файлов в zip-файле при вызове объекта ZipFile.

Здесь мы открыли файл в режиме “чтение”, поэтому “r” задается в качестве второго аргумента для Zip-файла() . Мы будем использовать цикл for здесь для перебора содержимого zip – файла.

#import module
import zipfile

#declare filename
filename="zip_tutorial/tutorial.zip"

# create a ZipFile object by opening file
zip_obj= zipfile.ZipFile(filename,"r")

#print the content of zip file
print("Content of the ZIP file are: ")
content_list=zip_obj.namelist()
for fname in content_list:
    print(fname)

#close the file object
zip_obj.close()

Вывод приведенного выше фрагмента кода:

Content of the ZIP file are: 
zip_tutorial/plane.xml
zip_tutorial/sample.txt
zip_tutorial/person.ini

Как проверить метаданные заархивированного файла?

Метаданные файла-это данные, содержащие описание любого файла. Он содержит информацию о дате создания, дате изменения , размере файла и другую информацию.

Чтобы получить метаданные zip-файла, мы можем использовать метод info list() модуля zipfile .

#import module
import zipfile

#declare filename
filename="zip_tutorial/tutorial.zip"

# create a ZipFile object by opening file
zip_obj= zipfile.ZipFile(filename,"r")

#print the metadata of zip file
print("Metadata of the ZIP file are: ")
content_list=zip_obj.infolist()
for info in content_list:
    print(info)

#close the file object
zip_obj.close()

Вывод вышеприведенного кода:

Metadata of the ZIP file are: 



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

Как добавить файлы непосредственно в zip-файл?

Мы можем добавить дополнительные файлы в zip-файл непосредственно с помощью метода write() из модуля zipfile , как мы делали при создании zip-файла.

Единственное отличие заключается в том, что мы должны открыть файл в режиме добавления, поэтому “a” передается в качестве второго аргумента ZipFile() метод.

#import module
import zipfile

#declare filename
filename="zip_tutorial/tutorial.zip"

# create a ZipFile object by opening file
zip_obj= zipfile.ZipFile(filename,"a")

#print the initial content of zip file
print("Initial Content of the ZIP file are: ")
content_list=zip_obj.namelist()
for fname in content_list:
    print(fname)

#Append a file to zip file
zip_obj.write("zip_tutorial/sampleoutput.txt")

#close the file objecz
zip_obj.close()

#read final content of the file after appending
nzip_obj= zipfile.ZipFile(filename,"a")

#print the initial content of zip file
print("Final Content of the ZIP file are: ")
ncontent_list=nzip_obj.namelist()
for fname in ncontent_list:
    print(fname)

#close the file
nzip_obj.close()

Выход:

Initial Content of the ZIP file are: 
zip_tutorial/plane.xml
zip_tutorial/sample.txt
zip_tutorial/person.ini
Final Content of the ZIP file are: 
zip_tutorial/plane.xml
zip_tutorial/sample.txt
zip_tutorial/person.ini
zip_tutorial/sampleoutput.txt

Как извлечь один файл из заархивированной папки?

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

Папка Перед Распаковкой

Метод extract() принимает имя файла в качестве аргумента и извлекает файл в нашем рабочем каталоге.

#import module
import zipfile

#declare filename
filename="zip_tutorial/tutorial.zip"

# create a ZipFile object by opening file
zip_obj= zipfile.ZipFile(filename,"r")

#extract file
zip_obj.extract("zip_tutorial/sampleoutput.txt")

#close the zip file
zip_obj.close()

На изображении, приведенном ниже, показана привязка папки после извлечения файла из zip-файла.

Извлеченный Файл Из ZIP

Как извлечь все файлы из заархивированной папки с помощью модуля zipfile?

Чтобы извлечь всю папку zip вместо одного файла, мы можем использовать метод extractall() модуля zipfile . На изображении, приведенном ниже, показана привязка папки перед извлечением содержимого zip-файла.

Папка Перед Распаковкой 1

Метод extractall() принимает имя выходного файла в качестве аргумента и извлекает все содержимое zip-файла в папку в нашем рабочем каталоге.

#import module
import zipfile

#declare filename
filename="zip_tutorial/tutorial.zip"

# create a ZipFile object by opening file
zip_obj= zipfile.ZipFile(filename,"r")

#extract all files 
zip_obj.extractall("zip_tutorial/tutorial_folder_after_extraction")

#close the zip file
zip_obj.close()

Ниже приведенное изображение показывает привязку папки после того, как все содержимое zip-файла было извлечено в другую папку.

Извлеченная Папка Из ZIP

Вывод

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