tarfile — Чтение и запись файлов tar архива

Исходный код: Lib/tarfile.py


Модуль tarfile позволяет читать и записывать архивы tar, в том числе с использованием сжатия gzip, bz2 и lzma. Используйте модуль zipfile для чтения или записи файлов .zip или функций более высокого уровня в shutil.

Некоторые факты и цифры:

  • считывает и записывает gzip, bz2 и lzma сжатые архивы, если доступны соответствующие модули.
  • поддержка чтения/записи для формата POSIX.1-1988 (ustar).
  • поддержка чтения/записи для формата GNU tar, включая расширения longname и longlink, поддержка только для чтения для всех вариантов расширения sparse, включая восстановление разреженных файлов.
  • поддержка чтения/записи для формата POSIX.1-2001 (pax).
  • обрабатывает каталоги, обычные файлы, жесткие ссылки, символьные ссылки, fifos, символ устройства и блочные устройства и может получать и восстанавливать информацию о файлах, такую как метка времени, разрешения доступа и владелец.

Изменено в версии 3.3: Добавлена поддержка сжатия lzma.

tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)

Возвращает объект TarFile для имени пути name. Подробные сведения об объектах TarFile и разрешенных аргументах ключевой см. в разделе Объекты TarFile.

mode должен быть строкой формы 'filemode[:compression]', по умолчанию используется 'r'. Вот полный список комбинаций режимов:

режим действие
'r' или 'r:*' Открыть для чтения с прозрачным сжатием (рекомендуется).
'r:' Открыть для чтения исключительно без сжатия.
'r:gz' Открыть для чтения со сжатием gzip.
'r:bz2' Открыть для чтения со сжатием bzip2.
'r:xz' Открыт для чтения со сжатием lzma.
'x' или 'x:' Создайть файл tarfile исключительно без сжатия. Создать исключение FileExistsError, если оно уже существует.
'x:gz' Создать tar файл с gzip сжатием. Поднять исключение FileExistsError, если он уже существует.
'x:bz2' Создать tar файл с bzip2 сжатием. Поднять исключение FileExistsError, если он уже существует.
'x:xz' Создать tar файл с lzma сжатием. Поднять исключение FileExistsError, если он уже существует.
'a' or 'a:' Открыть для добавления без сжатия. Файл создается, если он не существует.
'w' or 'w:' Открыть для несжатой записи.
'w:gz' Открыть для gzip сжатой записи.
'w:bz2' Открыть для записи со сжатием bzip2.
'w:xz' Открыт для записи со сжатием lzma.

Обратите внимание, что 'a:gz', 'a:bz2' или 'a:xz' невозможны. Если mode не подходит для открытия определенного (сжатого) файла для чтения, ReadError поднимается. Используйте mode 'r', чтобы избежать этого. Если метод сжатия не поддерживается, CompressionError поднимается.

Если fileobj указан, он используемый в качестве альтернативы объекта файла, открытому в двоичном режиме для name. Предполагается, что она находится в положении 0.

Для режимов 'w:gz', 'r:gz', 'w:bz2', 'r:bz2', 'x:gz', 'x:bz2', tarfile.open() принимает аргумент ключевой compresslevel (9 по умолчанию) для указания уровня сжатия файла.

Для специальных целей существует второй формат mode: 'filemode|[compression]'. tarfile.open() будет возвращает объект TarFile, который обрабатывает свои данные как поток блоков. Случайный поиск не будет выполнен в файле. Если указано, fileobj может быть любой объект, имеющий метод read() или write() (в зависимости от mode). bufsize указывает размер блока и по умолчанию составляет 20 * 512 байт. Используйте этот вариант в сочетании, например, с sys.stdin, сокет файлового объекта или ленточным устройством. Однако такой объект TarFile ограничен тем, что не допускает произвольного доступа, см. Примеры. Возможные в настоящее время режимы:

Режим Действие
'r|*' Открыть stream tar блоков для чтения с прозрачным сжатием.
'r|' Открыть stream несжатых tar блоков для чтения.
'r|gz' Открыть сжатый stream gzip для чтения.
'r|bz2' Открыть сжатый stream bzip2 для чтения.
'r|xz' Открыть сжатый stream lzma для чтения.
'w|' Открыть несжатый stream для записи.
'w|gz' Открыть сжатый stream gzip для записи.
'w|bz2' Открыть сжатый stream bzip2 для записи.
'w|xz' Открыть сжатый stream lzma для записи.

Изменено в версии 3.5: Добавлен режим 'x' (исключительного создания).

Изменено в версии 3.6: Параметр name принимает путеподобный объект.

class tarfile.TarFile

Класс для чтения и записи архивов tar. Не используйте этот класс напрямую: используйте tarfile.open(). См. Объекты TarFile.

tarfile.is_tarfile(name)

Возвращает True если name является архивным tar файлом, который может считываться модулем tarfile.

Модуль tarfile определяет следующие исключения:

exception tarfile.TarError

Базовый класс для всех tarfile исключений.

exception tarfile.ReadError

Возникает при открытии архива tar, который либо не может быть обработан модулем tarfile, либо является каким-то образом недействительным.

exception tarfile.CompressionError

Возникает, когда метод сжатия не поддерживается или когда данные не могут быть правильно декодированы.

exception tarfile.StreamError

Возникает из-за ограничений, типичных для потокоподобных объектов TarFile.

exception tarfile.ExtractError

Создается для ошибок non-fatal при использовании TarFile.extract(), но только если TarFile.errorlevel== 2.

exception tarfile.HeaderError

Вызывается TarInfo.frombuf(), если буфер, который он получает, недействителен.

На уровне модуля доступны следующие константы:

tarfile.ENCODING

символ кодировка по умолчанию: 'utf-8' на Windows, значение возвращенный sys.getfilesystemencoding() иначе.

Каждая из следующих констант определяет формат архива tar, который может создать модуль tarfile. Дополнительные сведения см. в разделе Поддерживаемые форматы tar.

tarfile.USTAR_FORMAT

POSIX.1-1988 (устар) формат.

tarfile.GNU_FORMAT

Формат GNU tar.

tarfile.PAX_FORMAT

Формат POSIX.1-2001 (pax).

tarfile.DEFAULT_FORMAT

Формат по умолчанию для создания архивов. В настоящее время это PAX_FORMAT.

Изменено в версии 3.8: Формат по умолчанию для новых архивов был изменен на PAX_FORMAT из GNU_FORMAT.

См.также

Модуль zipfile
Документация стандартного модуля zipfile.
Архивные операции
Документация по средствам архивирования более высокого уровня, предоставляемая стандартным модулем shutil.
Руководство по GNU tar, базовый формат tar
Документация для файлов архива tar, включая расширения GNU tar.

Объекты TarFile

Объект TarFile обеспечивает интерфейс с архивом tar. Архив tar представляет собой последовательность блоков. Элемент архива (сохраненный файл) состоит из блока заголовка, за которым следуют блоки данных. Файл можно хранить в архиве tar несколько раз. Каждый элемент архива представлен TarInfo объектом, подробные сведения см. в разделе Объекты TarInfo.

Объект TarFile можно используемый как диспетчер контекст в with инструкция. Он будет автоматически закрыт по завершении блокировки. Обратите внимание, что в случае исключения архив, открытый для записи, не будет завершен; будет закрыт только внутренне используемый объект файла. Пример использования см. в разделе «Примеры».

Добавлено в версии 3.2: Добавлена поддержка протокола управления контекст.

class tarfile.TarFile(name=None, mode='r', fileobj=None, format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False, ignore_zeros=False, encoding=ENCODING, errors='surrogateescape', pax_headers=None, debug=0, errorlevel=0)

Все следующие аргументы являются необязательными и также доступны как сущность атрибуты.

name - это путь к архиву. name может быть путеподобным объектом. Он может быть опущен, если дано fileobj. В этом случае name атрибут объекта файла используемый, если он существует.

mode либо 'r' для чтения из существующего архива, 'a' для добавления данных в существующий файл, 'w' для создания нового файла, перезаписывающего существующий, либо 'x' для создания нового файла, если он еще не существует.

Если fileobj дано, оно используемый для чтения или записи данных. Если это можно определить, mode переопределяется режимом fileobj. fileobj будет используемый из положения 0.

Примечание

fileobj не закрыт, когда TarFile закрыт.

format управляет форматом архива для записи. Это должна быть одна из констант USTAR_FORMAT, GNU_FORMAT или PAX_FORMAT, определенных на уровне модуля. При чтении формат будет автоматически обнаружен, даже если в одном архиве присутствуют разные форматы.

Аргумент tarinfo можно используемый для замены класса TarInfo по умолчанию другим.

Если dereference False, добавьте в архив символьные и жесткие ссылки. Если это True, добавьте содержимое целевых файлов в архив. Это не влияет на системы, которые не поддерживают символьные ссылки.

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

debug можно установить от 0 (без сообщений отладки) до 3 (все сообщения отладки). Сообщения записываются в sys.stderr.

Если errorlevel 0, все ошибки игнорируются при использовании TarFile.extract(). Тем не менее, они отображаются как сообщения об ошибках в выходных данных отладки, когда отладка включена. Если 1, все ошибки fatal возникают как исключения OSError. При 2 все ошибки non-fatal также рассматриваются как исключения TarError.

Аргументы encoding и errors определяют символ кодировка, используемый для чтения или записи архива, а также способ обработки ошибок преобразования. Настройки по умолчанию будут работать для большинства пользователей. Подробные сведения см. в разделе Проблемы с Юникодом.

Аргумент pax_headers является дополнительным словарем строки, который добавляется в виде глобального заголовка pax, если format PAX_FORMAT.

Изменено в версии 3.2: Используйте 'surrogateescape' в качестве значения по умолчанию для аргумента errors.

Изменено в версии 3.5: Добавлен режим 'x' (исключительного создания).

Изменено в версии 3.6: Параметр name принимает путеподобный объект.

classmethod TarFile.open(...)

Альтернативный конструктор. Функция tarfile.open() на самом деле является ярлыком к этому методу.

TarFile.getmember(name)

Возвращает объект TarInfo для name-членов. Если name не удается найти в архиве, KeyError поднимается.

Примечание

Если элемент встречается в архиве более одного раза, его последнее появление считается самой актуальной версией.

TarFile.getmembers()

Возвращает членов архива в виде списка TarInfo объектов. Список имеет тот же порядок, что и элементы в архиве.

TarFile.getnames()

Возвращает участников в виде списка их имен. Он имеет тот же порядок, что и список, возвращенный getmembers().

TarFile.list(verbose=True, *, members=None)

Печать оглавления в sys.stdout. Если verbose False, печатаются только имена участников. При True производится выход, аналогичный выходному выходу ls -l. Если задан дополнительный members, он должен быть подмножеством списка, возвращенный getmembers().

Изменено в версии 3.5: Добавлен параметр members.

TarFile.next()

Возвращает следующий элемент архива в качестве объекта TarInfo, когда TarFile открыт для чтения. Возвращает None, если их больше нет.

TarFile.extractall(path=".", members=None, *, numeric_owner=False)

Извлечь все элементы из архива в текущий рабочий каталог или path каталога. Если задан дополнительный members, он должен быть подмножеством списка, возвращенный getmembers(). Сведения о директории, такие как владелец, время изменения и разрешения, устанавливаются после извлечения всех участников. Это делается, чтобы обойти две проблемы: время модификации каталога сбрасывается каждый раз, когда в нем создается файл. И, если разрешения каталога не разрешают запись, извлечение файлов в него завершится ошибкой.

Если numeric_owner True, используемый номера uid и gid из tarfile, чтобы установить владельца/группу для извлеченных файлов. В противном случае именованные значения из тарфила будут используемый.

Предупреждение

Никогда не извлекайте архивы из ненадежных источников без предварительной проверки. Возможно, что файлы создаются вне path, например, элементы с абсолютными именами файлов, начинающимися с "/", или имена файлов с двумя точками "..".

Изменено в версии 3.5: Добавлен параметр numeric_owner.

Изменено в версии 3.6: Параметр path принимает путеподобный объект.

TarFile.extract(member, path="", set_attrs=True, *, numeric_owner=False)

Извлечь элемент из архива в текущий рабочий каталог, используя его полное имя. Его файловая информация извлекается максимально точно. member может быть именем файла или TarInfo объектом. С помощью path можно указать другой каталог. path может быть путеподобный объект. атрибуты файлов (владелец, время, режим) устанавливаются, если set_attrs не имеет значения false.

Если numeric_owner True, используемый номера uid и gid из tarfile, чтобы установить владельца/группу для извлеченных файлов. В противном случае именованные значения из тарфила будут используемый.

Примечание

Метод extract() не учитывает несколько проблем извлечения. В большинстве случаев следует использовать метод extractall().

Предупреждение

См. предупреждение для extractall().

Изменено в версии 3.2: Добавлен параметр set_attrs.

Изменено в версии 3.5: Добавлен параметр numeric_owner.

Изменено в версии 3.6: Параметр path принимает путеподобный объект.

TarFile.extractfile(member)

Извлечь элемент из архива как файловый объект. member может быть именем файла или TarInfo объектом. Если member является обычным файлом или ссылкой, io.BufferedReader объект возвращенный. В противном случае None будет возвращен.

Изменено в версии 3.3: Возвращает объект io.BufferedReader.

TarFile.add(name, arcname=None, recursive=True, *, filter=None)

Добавить name файла в архив. name может быть любым типом файла (каталог, fifo, символьная ссылка и т.д.). Если указано, arcname указывает альтернативное имя файла в архиве. Каталоги добавляются рекурсивно по умолчанию. Этого можно избежать, установив для recursive значение False. Рекурсия добавляет записи в отсортированном порядке. Если filter задано, это должна быть функция, которая принимает аргумент TarInfo объекта и возвращает измененный объект TarInfo. Если вместо этого возвращает None объект TarInfo будет исключен из архива. Пример см. в разделе Примеры.

Изменено в версии 3.2: Добавлен параметр filter.

Изменено в версии 3.7: Рекурсия добавляет записи в отсортированном порядке.

TarFile.addfile(tarinfo, fileobj=None)

Добавить TarInfo объекта tarinfo в архив. Если fileobj дано, оно должно быть двоичным файлом, а tarinfo.size байты считываются из него и добавляются в архив. Можно создавать TarInfo объекты непосредственно или с помощью gettarinfo().

TarFile.gettarinfo(name=None, arcname=None, fileobj=None)

Создать объект TarInfo из результата os.stat() или эквивалента существующего файла. Файл или называет name или определяется как файловый объект fileobj с файлом дескриптор. name может быть путеподобным объектом. Если указано, arcname указывает альтернативное имя файла в архиве, в противном случае имя берется из fileobj «s name атрибут, или из аргумента name. Имя должно быть текстовой строкой.

Можно изменить некоторые атрибуты TarInfo перед их добавлением с помощью addfile(). Если файловый объект не является обычным файловым объектом, расположенным в начале файла, может потребоваться изменение таких атрибуты, как size. Это относится к таким объектам, как GzipFile. Этот name также может быть модифицирован, и в этом случае arcname может быть фиктивной строкой.

Изменено в версии 3.6: Параметр name принимает путеподобный объект.

TarFile.close()

Закрыть TarFile. В режиме записи к архиву добавляются два завершающих нулевых блока.

TarFile.pax_headers

Словарь, содержащий ключ-значение пары глобальных заголовков pax.

Объекты TarInfo

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

TarInfo объекты возвращенный методами TarFile getmember(), getmembers() и gettarinfo().

class tarfile.TarInfo(name="")

Создать объект TarInfo.

classmethod TarInfo.frombuf(buf, encoding, errors)

Создать и вернуть объект TarInfo от строка буферизует buf.

Вызывает HeaderError, если буфер недействителен.

classmethod TarInfo.fromtarfile(tarfile)

Читать следующий член от TarFile объекта tarfile и возвращает это, как TarInfo объект.

TarInfo.tobuf(format=DEFAULT_FORMAT, encoding=ENCODING, errors='surrogateescape')

Создать буфер строка из объекта TarInfo. Сведения о аргументах см. в конструкторе класса TarFile.

Изменено в версии 3.2: Используйте 'surrogateescape' в качестве значения по умолчанию для аргумента errors.

Объект TarInfo имеет следующие публичные атрибуты данных:

TarInfo.name

Имя поля архива.

TarInfo.size

Размер в байтах.

TarInfo.mtime

Время последней модификации.

TarInfo.mode

Биты разрешения.

TarInfo.type

Тип файла. type обычно - одна из этих констант: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE. Для более удобного определения типа TarInfo объекта используйте is*() ниже методы.

TarInfo.linkname

Имя целевого файла, которое присутствует только во TarInfo объектах типа LNKTYPE и SYMTYPE.

TarInfo.uid

Идентификатор пользователя, который первоначально хранил этого участника.

TarInfo.gid

Идентификатор группы пользователя, который первоначально хранил этого участника.

TarInfo.uname

Имя пользователя.

TarInfo.gname

Название группы.

TarInfo.pax_headers

Словарь, содержащий ключ-значение пары связанного расширенного заголовка pax.

Объект TarInfo также предоставляет несколько удобных методов запроса:

TarInfo.isfile()

Возвращает True, является ли объект Tarinfo обычным файлом.

TarInfo.isreg()

То же, что и isfile().

TarInfo.isdir()

Возвращает True, если это каталог.

TarInfo.issym()

Возвращает True, если это символическая ссылка.

TarInfo.islnk()

Возвращает True, если это жесткое звено.

TarInfo.ischr()

Возвращает True, является ли устройство символ.

TarInfo.isblk()

Возвращает True, является ли это блочным устройством.

TarInfo.isfifo()

Возвращает True, если это FIFO.

TarInfo.isdev()

Возвращает True, является ли оно одним из символьных устройств, блочных устройств или FIFO.

Интерфейс командной строки

Добавлено в версии 3.4.

Модуль tarfile обеспечивает простой интерфейс командной строки для взаимодействия с архивами tar.

Если требуется создать новый архив tar, укажите его имя после параметра -c, а затем перечислите имена файлов, которые должны быть включены:

$ python -m tarfile -c monty.tar  spam.txt eggs.txt

Передача каталога также допустима:

$ python -m tarfile -c monty.tar life-of-brian_1979/

Если требуется извлечь архив tar в текущий каталог, используйте опцию -e:

$ python -m tarfile -e monty.tar

Можно также извлечь архив tar в другой каталог, передав имя каталога:

$ python -m tarfile -e monty.tar  other-dir/

Для получения списка файлов в архиве tar используйте -l опцию:

$ python -m tarfile -l monty.tar

Параметры командной строки

-l <tarfile>
--list <tarfile>

Список файлов в тарфиле.

-c <tarfile> <source1> ... <sourceN>
--create <tarfile> <source1> ... <sourceN>

Создать файл tarfile из исходных файлов.

-e <tarfile> [<output_dir>]
--extract <tarfile> [<output_dir>]

Извлеч файл tarfile в текущий каталог, если output_dir не указан.

-t <tarfile>
--test <tarfile>

Проверить, является ли файл tarfile действительным или нет.

-v, --verbose

Многословный вывод.

Примеры

Извлечение всего архива tar в текущий рабочий каталог:

import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()

Извлечение подмножества архива tar с помощью TarFile.extractall() с помощью функции генератора вместо списка:

import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()

Создание несжатого архива tar из списка имен файлов:

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()

Тот же пример использования with инструкции:

import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)

Как прочитать архив gzip со сжатием и отобразить некоторые сведения об участниках:

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()

Создание архива и сброс пользовательской информации с помощью параметра filter в TarFile.add():

import tarfile
def reset(tarinfo):
    tarinfo.uid = tarinfo.gid = 0
    tarinfo.uname = tarinfo.gname = "root"
    return tarinfo
tar = tarfile.open("sample.tar.gz", "w:gz")
tar.add("foo", filter=reset)
tar.close()

Поддерживаемые форматы tar

Существует три формата tar, которые можно создать с помощью модуля tarfile:

  • Формат POSIX.1-1988 ustar (USTAR_FORMAT). Он поддерживает имена файлов длиной не более 256 символов и до 100 символов текста ссылки. Максимальный размер файла - 8 GiB. Это старый и ограниченный, но широко поддерживаемый формат.

  • Формат tar GNU (GNU_FORMAT). Он поддерживает длинные имена файлов и linknames, файлы больше 8 GiB и разреженные файлы. Является фактическим стандартом для систем GNU/Linux. tarfile полностью поддерживает расширения GNU tar для длинных имен, поддержка разреженных файлов доступна только для чтения.

  • Формат POSIX.1-2001 pax (PAX_FORMAT). Это наиболее гибкий формат практически без ограничений. Он поддерживает длинные имена файлов и linknames, большие файлы и хранит пути в переносимом виде. Современные реализации tar, включая GNU tar, bsdtar/libarchive и star, полностью поддерживают расширенные возможности pax; некоторые старые или неподдерживаемые библиотеки не могут, но должны относиться к pax архивам так, как если бы они были в универсально поддерживаемом формате ustar. Это текущий формат по умолчанию для новых архивов.

    Он расширяет существующий формат ustar дополнительными заголовками для информации, которая не может быть сохранена иначе. Существует два вида заголовков pax: расширенные заголовки влияют только на последующий заголовок файла, глобальные заголовки действительны для всего архива и влияют на все следующие файлы. Все данные в заголовке pax кодированный в UTF-8 по соображениям переносимости.

Есть еще несколько вариантов формата tar, которые можно прочитать, но не создать:

  • Древний формат V7. Это первый формат tar от Unix Седьмое издание, хранящий только обычные файлы и каталоги. Имена не должны содержать более 100 символов, сведения об именах пользователей и групп отсутствуют. Некоторые архивы имеют просчитанные контрольные суммы заголовка в случае полей с символами, отличными от ASCII.
  • Расширенный формат SunOS tar. Этот формат является вариантом формата POSIX.1-2001 pax, но несовместим.

Проблемы с Юникодом

Формат tar изначально задумывался для создания резервных копий на ленточных накопителях с основным акцентом на сохранение информации о файловой системе. В настоящее время архивы tar обычно используемый для распространения файлов и обмена архивами по сетям. Одной из проблем исходного формата (который является основой всех остальных форматов) является отсутствие концепции поддержки различных кодировок символ. Например, обычный архив tar, созданный в системе UTF-8, не может быть правильно прочитан в системе Latin-1, если он содержит не ASCII символы. Текстовые метаданные (например, имена файлов, имена линий, имена пользователей/групп) будут повреждены. К сожалению, нет возможности для автоматического обнаружения кодировка архива. Формат pax был разработан для решения этой проблемы. Он хранит метаданные, не относящиеся к ASCII, с помощью универсального символ кодировка UTF-8.

Деталями преобразования символ в tarfile управляют аргументы encoding и errors ключевого класса TarFile.

encoding определяет символ кодировка для использования метаданных в архиве. По умолчанию используется значение sys.getfilesystemencoding() или 'ascii' в качестве резервного. В зависимости от того, считывается или записывается архив, метаданные должны быть либо декодированы, либо кодированный. Если encoding не установлен должным образом, это преобразование может завершиться ошибкой.

Аргумент errors определяет способ обработки символов, которые невозможно преобразовать. Возможные значения перечислены в разделе Обработчики ошибок. По умолчанию используется схема 'surrogateescape' которая также используется Python для вызовов файловой системы (см. Имена файлов, аргументы командной строки и переменные среды).

Для PAX_FORMAT архивов (по умолчанию) encoding обычно не требуется, поскольку все метаданные хранятся с использованием UTF-8. encoding используемый только в редких случаях, когда двоичные заголовки pax декодируются или когда хранятся строки с суррогатными символами.