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.
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
. Если verboseFalse
, печатаются только имена участников. При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 «sname
атрибут, или из аргумента 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()
.
-
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
также предоставляет несколько удобных методов запроса:
Интерфейс командной строки¶
Добавлено в версии 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
Параметры командной строки¶
-
-c
<tarfile> <source1> ... <sourceN>
¶ -
--create
<tarfile> <source1> ... <sourceN>
¶ Создать файл tarfile из исходных файлов.
-
-e
<tarfile> [<output_dir>]
¶ -
--extract
<tarfile> [<output_dir>]
¶ Извлеч файл tarfile в текущий каталог, если output_dir не указан.
-
-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 декодируются
или когда хранятся строки с суррогатными символами.