Шаг 253.
Основы языка Python.
Сжатие данных. Работа с архивами TAR

    На этом шаге мы рассмотрим особенности работы с такими архивами.

    В отличие от файлов ZIP, архивы формата TAR не используют сжатие. Обычно такие архивы дополнительно сжимаются другим архиватором: GZIP, BZIP2 или LZMA. Однако - и в этом состоит их другое отличие от ZIP-файлов - они могут включать в свой состав не только файлы, но и папки, хранящие как файлы, так и другие папки.

    Python поддерживает работу с архивами TAR - как несжатыми, так и сжатыми. Для этого предназначается модуль tarfile.

    Проще всего открыть архив вызовом функции open(). Она принимает очень много параметров:

  open([name=None][, mode='r'][, fileobj=None][, compresslevel=9]
    [, format=DEFAULT_FORMAT] [, dereference=False] [, tarinfo=TarInfo]
    [, ignore_zeros=False][, encoding=ENCODING][, errors='surrogateescape']
    [, pax_headers=None][, debug=0][, errorlevel=0])

    Открываемый файл может быть задан либо в виде имени (параметр name), либо в виде файлового объекта (параметр fileobj).

    Параметр mode задает режим открытия и алгоритм сжатия файла. Его значение указывается в виде строки в формате:

  <Режим открытия>[[:]<Алгоритм сжатия>] 

    Доступны три режима открытия файла:

    Алгоритмов сжатия можно указать также три: gz (GZIP), bz2 (BZIP2) и xz (LZMA). Если же алгоритм не указан, то при открытии файла на чтение он будет определен автоматически, а при открытии на запись или добавление сжатие использовано не будет. Примеры указания режимов открытия и сжатия файлов:

    Параметр compresslevel задает степень сжатия и доступен лишь при указании какого-либо алгоритма сжатия.

    Параметр format указывает формат архива TAR. Для него доступны четыре значения:

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

    Остальные параметры используются в особых случаях и подробно описаны в документации по модулю tarfile, поставляемой в составе Python.

    Функция open() возвращает в качестве результата объект класса TarFile, представляющий созданный или открытый архивный файл.

    Открыть или создать файл мы можем, непосредственно создав объект этого класса. Его конструктор вызывается так же, как и функция open():

  TarFile ([name=None] [, mode='r'][, fileobj=None] [, compress level=9]
    [, format=DEFAULT_FORMAT] [, dereference=False] [, tarinfo=TarInfo]
    [, ignore_zeros=False][, encoding=ENCODING][, errors='surrogateescape']
    [, pax_headers=None][, debug=0][, errorlevel=0])

    Однако следует иметь в виду, что в этом случае параметр mode может указывать лить режим открытия файла: r, w или a. Задать алгоритм сжатия в нем нельзя. Пример:

>>> import tarfile
>>> # Поскольку мы не можем создать сжатый файл TAR,
>>> # сначала создадим несжатый...
>>> f = tarfile.TarFile (name = "test.tar.gz", mode = "a")
>>> # ...сразу же закроем его...
>>> f.close()
>>> # ...а потом откроем снова, указав алгоритм сжатия GZIP
>>> f = tarfile.open (name = "test.tar.gz", mode = "w:gz")

    На следующем шаге мы рассмотрим методы класса TarFile.




Предыдущий шаг Содержание Следующий шаг