Работа с ZIP-архивами

Открытие Zip файлов

Для начала импортировать zipfile модуль и установить имя файла.

 import zipfile
filename = 'zipfile.zip'

 

Работа с почтовыми архивами очень похоже на работу с файлами , вы создаете объект, открыв ZipFile, которая позволяет работать на нем , прежде чем закрыть файл снова.

 zip = zipfile.ZipFile(filename)
print(zip)
# <zipfile.ZipFile object at 0x0000000002E51A90>
zip.close()

 

В Python 2.7 и Python 3 версии выше 3.2, можно использовать with менеджером контекста. Мы открываем файл в режиме «чтения», а затем печатаем список имен файлов:

 with zipfile.ZipFile(filename, 'r') as z:
    print(zip)
    # <zipfile.ZipFile object at 0x0000000002E51A90>

 

Изучение содержимого Zipfile

Есть несколько способов проверить содержимое zip-файла. Вы можете использовать printdir , чтобы просто получить различную информацию , отправляемые на stdout

 with zipfile.ZipFile(filename) as zip:
    zip.printdir()

    # Out:
    # File Name                                             Modified             Size
    # pyexpat.pyd                                    2016-06-25 22:13:34       157336
    # python.exe                                     2016-06-25 22:13:34        39576
    # python3.dll                                    2016-06-25 22:13:34        51864
    # python35.dll                                   2016-06-25 22:13:34      3127960
    # etc.

 

Мы можем также получить список имен файлов с namelist метода. Здесь мы просто печатаем список:

 with zipfile.ZipFile(filename) as zip:
    print(zip.namelist())

# Out: ['pyexpat.pyd', 'python.exe', 'python3.dll', 'python35.dll', ... etc. ...]

 

Вместо того , чтобы namelist , мы можем назвать infolist метода, который возвращает список ZipInfo объектов, которые содержат дополнительную информацию о каждом файле, например , метка времени и размере файла:

 with zipfile.ZipFile(filename) as zip:
    info = zip.infolist()
    print(zip[0].filename)
    print(zip[0].date_time)
    print(info[0].file_size)

# Out: pyexpat.pyd
# Out: (2016, 6, 25, 22, 13, 34)
# Out: 157336 

Извлечение содержимого zip-файла в каталог

Извлечь все содержимое файла zip-файла

 import zipfile
with zipfile.ZipFile('zipfile.zip','r') as zfile:
    zfile.extractall('path')

 

Если вы хотите извлечь отдельные файлы, используйте метод extract, он принимает список имен и путь в качестве входного параметра

 import zipfile
f=open('zipfile.zip','rb')
zfile=zipfile.ZipFile(f)
for cont in zfile.namelist():
    zfile.extract(cont,path) 

Создание новых архивов

Для создания нового архива откройте zipfile с режимом записи.

 import zipfile
new_arch=zipfile.ZipFile("filename.zip",mode="w")

 

Чтобы добавить файлы в этот архив, используйте метод write ().

 new_arch.write('filename.txt','filename_in_archive.txt') #first parameter is filename and second parameter is filename in archive by default filename will taken if not provided
new_arch.close()

 

Если вы хотите записать строку байтов в архив, вы можете использовать метод writestr ().

 str_bytes="string buffer"
new_arch.writestr('filename_string_in_archive.txt',str_bytes)
new_arch.close()