tarfile
— Чтение и запись tar архивных файлов¶
Модуль tarfile
позволяет читать и записывать tar-архивы, в том числе с
использованием сжатия gzip, bz2 и lzma. Используйте модуль zipfile
для
чтения или записи .zip
файлов или функций более высокого уровня в
shutil.
Некоторые факты и цифры:
- читает и записывает сжатые архивы
gzip
,bz2
иlzma
, если соответствующие модули доступны. - поддержка чтения/записи для формата POSIX.1-1988 (ustar).
- поддержка чтения/записи для формата GNU tar, включая расширения longname и longlink, поддержка только для чтения для всех вариантов расширения sparse, включая восстановление разрежённых файлов.
- поддержка чтения/записи для формата POSIX.1-2001 (pax).
- обрабатывает каталоги, обычные файлы, жёсткие ссылки, символические ссылки, FIFO, символьные устройства и блочные устройства, а также может получать и восстанавливать информацию о файлах, такую как временная метка, права доступа и владелец.
Изменено в версии 3.3: Добавлена поддержка сжатия lzma
.
-
tarfile.
open
(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)¶ Возвращает объект
TarFile
для пути name. Для получения подробной информации об объектахTarFile
и допустимых ключевых аргументах см. Объекты TarFile.mode должен быть строкой в форме
'filemode[:compression]'
, по умолчанию —'r'
. Вот полный список комбинаций mode:mode действие '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
ограничен тем, что не разрешает произвольный доступ, см. Примеры. Возможные на данный момент mode:mode Действие '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
¶ Поднимается для несмертельных ошибок при использовании
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 (ustar).
-
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
, все фатальные ошибки возникают как исключенияOSError
. Если2
, все ошибки нефатальные также возникают как исключения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 из tar-файла используются для установки владельца/группы для извлеченных файлов. В противном случае используются именованные значения из tar-файла.Предупреждение
Никогда не извлекайте архивы из ненадёжных источников без предварительной проверки. Возможно, что файлы созданы вне path, например элементы, которые имеют абсолютные имена файлов, начинающиеся с
"/"
, или имена файлов с двумя точками".."
.Изменено в версии 3.5: Добавлен параметр numeric_owner.
Изменено в версии 3.6: Параметр path принимает путеподобный объект.
-
TarFile.
extract
(member, path="", set_attrs=True, *, numeric_owner=False)¶ Извлечь элемент из архива в текущий рабочий каталог, используя его полное имя. Информация о файле извлекается с максимально возможной точностью. member может быть именем файла или объектом
TarInfo
. Вы можете указать другой каталог, используя path. path может быть путеподобным объектом. Атрибуты файла (владелец, время, режим) устанавливаются, если set_attrs не является ложным.Если numeric_owner —
True
, номера uid и gid из tar-файла используются для установки владельца/группы для извлеченных файлов. В противном случае используются именованные значения из tar-файла.Примечание
Метод
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 может быть файлом любого типа (каталог, файл, символическая ссылка и т. д.). Если задано, 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 указывает альтернативное имя для файла в архиве, в противном случае имя берётся из атрибутаname
fileobj или аргумента 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
¶ ID пользователя, который изначально сохранил этот элемент.
-
TarInfo.
gid
¶ ID группы пользователя, который изначально сохранил этот элемент.
-
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>
¶ Создать tar-файл из исходных файлов.
-
-e
<tarfile> [<output_dir>]
¶ -
--extract
<tarfile> [<output_dir>]
¶ Распаковать tar-файл в текущий каталог, если 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)
Как читать tar-архив, сжатый 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
:
Формат ustar POSIX.1-1988 (
USTAR_FORMAT
). Он поддерживает имена файлов длиной до 256 символов и имена ссылок до 100 символов. Максимальный размер файла — 8 ГиБ. Это старый и ограниченный, но широко поддерживаемый формат.Формат GNU tar (
GNU_FORMAT
). Он поддерживает длинные имена файлов и ссылки, файлы размером более 8 ГиБ и разрежённые файлы. Это стандарт де-факто для систем GNU/Linux.tarfile
полностью поддерживает расширения GNU tar для длинных имен, поддержка разрежённых файлов доступна только для чтения.Формат POSIX.1-2001 pax (
PAX_FORMAT
). Это наиболее гибкий формат практически без ограничений. Он поддерживает длинные имена файлов и ссылки, большие файлы и сохраняет пути в переносимом виде. Современные реализации tar, включая GNU tar, bsdtar/libarchive и star, полностью поддерживают расширенные функции pax; некоторые старые или неподдерживаемые библиотеки могут этого не делать, но должны обрабатывать архивы pax так, как если бы они были в универсально поддерживаемом формате ustar. Это текущий формат по умолчанию для новых архивов.Он расширяет существующий формат ustar дополнительными заголовками для информации, которая не может быть сохранена иначе. Есть две разновидности заголовков pax: расширенные заголовки влияют только на последующий заголовок файла, глобальные заголовки действительны для всего архива и влияют на все следующие файлы. Все данные в заголовке pax закодированы в UTF-8 по соображениям переносимости.
Есть ещё несколько вариантов формата tar, которые можно читать, но нельзя создавать:
- Древний формат V7. Это первый формат tar из Unix Seventh Edition, в котором хранятся только обычные файлы и каталоги. Имена не должны быть длиннее 100 символов, информация об имени пользователя/группы отсутствует. Некоторые архивы неправильно рассчитывают контрольные суммы заголовков в случае полей с символами, отличными от ASCII.
- Расширенный формат tar SunOS. Этот формат является вариантом формата pax POSIX.1-2001, но несовместим.
Проблемы с Юникодом¶
Формат 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 декодируются
или когда хранятся строки с суррогатными символами.