Сообщить об ошибке.

Класс PyZipFile() модуля zipfile в Python

PyZipFile для работы архивами-приложениями Python

Синтаксис:

import zipfile

pzf = zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, 
                        allowZip64=True, optimize=-1)

Параметры:

  • file - имя ZIP-файла,
  • mode='r' - режим открытия ZIP-файла,
  • compression=ZIP_STORED - метод/алгоритм сжатия,
  • allowZip64=True - расширение ZIP64,
  • optimize=-1 - оптимизация.

Возвращаемое значение:

  • объект PyZipFile.

Описание:

Класс PyZipFile() модуля zipfile работает с исполняемыми архивами-приложениями Python.

Конструктор класса zipfile.PyZipFile принимает те же параметры, что и конструктор zipfile.ZipFile и один дополнительный параметр - optimize.

Объекты PyZipFile имеют один метод в дополнение к методам объекта ZipFile:

PyZipFile.writepy(pathname, basename='', filterfunc=None):

Дополнительный метод PyZipFile.writepy() ищет соответствующий файл *.py и добавляет его в архив-приложение.

Если аргумент optimize для zipfile.PyZipFile() не задан или равен -1, соответствующий файл представляет собой файл *.pyc, компилируемый при необходимости.

Если аргумент optimize был задан как 0, 1 или 2, в архив добавляются только файлы с таким уровнем оптимизации, которые компилируются при необходимости. Более подробно смотрите встроенную функцию compile().

Если аргумент pathname является файлом, то имя файла должно заканчиваться на .py и на верхнем уровне добавляется соответствующий *.pyc файл без информации о пути. Если pathname - это файл, который не заканчивается на .py, будет вызвано исключение RuntimeError. Если это каталог и каталог не является каталогом пакета, то все файлы *.pyc добавляются на верхнем уровне. Если каталог является каталогом пакета, то все *.pyc добавляются под именем пакета в качестве пути к файлу и если какие-либо подкаталоги являются каталогами пакетов, все они добавляются рекурсивно в отсортированном порядке.

Аргумент basename предназначен только для внутреннего использования.

Если указан аргумент filterfunc, то это должна быть функция, принимающая один строковый аргумент. Перед передачей файлов в архив, функции будет передан каждый путь, включая каждый отдельный полный путь к файлу. Если filterfunc возвращает ложное значение, то путь не будет добавлен, а если это каталог, его содержимое будет игнорироваться.

Например, если все тестовые файлы находятся в тестовых каталогах или начинаются со строки test_, то можно использовать filterfunc, чтобы исключить их:

>>> zf = PyZipFile('myprog.zip')
>>> def notests(s):
...     fn = os.path.basename(s)
...     return (not (fn == 'test' or fn.startswith('test_')))
>>> zf.writepy('myprog', filterfunc=notests)

Метод PyZipFile.writepy() создает архивы с именами файлов:

string.pyc                   # Имя верхнего уровня
test/__init__.pyc            # Каталог пакетов
test/testall.pyc             # Модуль test.testall
test/bogus/__init__.pyc      # Каталог подпакетов
test/bogus/myfile.pyc        # Подмодуль test.bogus.myfile