Поиск…


Синтаксис

  • импорт zipfile
  • класс zipfile. ZipFile ( файл, режим = 'r', сжатие = ZIP_STORED, allowZip64 = True )

замечания

Если вы попытаетесь открыть файл, который не является ZIP-файлом, zipfile.BadZipFile исключение zipfile.BadZipFile .

В Python 2.7 это было написано zipfile.BadZipfile , и это старое имя сохраняется вместе с новым в Python 3.2+

Открытие почтовых файлов

Чтобы начать, импортируйте zipfile модуль и задайте имя файла.

import zipfile
filename = 'zipfile.zip'

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

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

Есть несколько способов проверить содержимое zipfile. Вы можете использовать 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 , которые содержат дополнительную информацию о каждом файле, например 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()


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow