Автор оригинала: 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-файла.
Чтобы создать сжатый 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-файла.
Как проверить содержимое заархивированной папки, не извлекая из нее файлы?
Чтобы проверить содержимое 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-файла.
Как извлечь все файлы из заархивированной папки с помощью модуля zipfile?
Чтобы извлечь всю папку zip вместо одного файла, мы можем использовать метод extractall()
модуля zipfile
. На изображении, приведенном ниже, показана привязка папки перед извлечением содержимого zip-файла.
Метод 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-файлы и управлять ими с помощью модуля Python zipfile. Мы также видели, как извлечь один файл, а также все содержимое zip-файлов. Счастливого Обучения!