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

Класс TarFile() модуля tarfile в Python

Чтение и запись контейнеров tar

Синтаксис:

import tarfile

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=None - имя контейнера tar,
  • mode='r' - режим открытия контейнера,
  • fileobj=None - объект файла,
  • format=DEFAULT_FORMAT - форматом архива для записи,
  • tarinfo=TarInfo - замена класса tarfile.TarInfo,
  • dereference=False - что делать с символическими и жесткими ссылками,
  • ignore_zeros=False - что делать с пустыми блоками,
  • encoding=ENCODING - кодировка при чтения или записи,
  • errors='surrogateescape' - обработчик ошибок кодировки при чтения или записи
  • pax_headers=None - словарь строк заголовка pax,
  • debug=0 - уровень вывода дополнительной информации,
  • errorlevel=0 - что делать при ошибках чтения.

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

Описание:

Класс TarFile() модуля tarfile используется для чтения и записи контейнеров tar. Не используйте этот класс напрямую: используйте вместо него функцию tarfile.open().

Контейнер tar представляет собой последовательность блоков. Член архива - сохраненный файл состоит из блока заголовка, за которым следуют блоки данных. Можно сохранить файл в архиве tar несколько раз. Каждый член архива представлен объектом TarInfo.

Экземпляр класса tarfile.TarFile может использоваться как менеджер контекста в операторе with. Он будет автоматически закрыт, когда блок будет завершен. Обратите внимание, что в случае исключения архив, открытый для записи, не будет завершен. Только внутренне используемый объект файла будет закрыт.

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

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

Аргумент mode может быть:

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

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

Примечание: fileobj не закрывается, когда закрывается tarfile.TarFile.

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

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

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

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

Аргумент debug может быть установлен ​​от 0 - нет сообщений отладки до 3 - все сообщения отладки. Сообщения пишутся в sys.stderr.

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

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

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

Примеры использования:

Создание контейнера .tar.

import tarfile

# архивируемый каталог
path = '/home/docs-python/script/sql-script/'
# корневой путь в архиве
path_tar = 'sql-script'

# создание контейнера
with tarfile.TarFile('sample.tar', 'w') as tar:
    tar.add(path, path_tar)

Добавление файла/каталога к контейнеру .tar. Добавим тот же каталог, но в другой корневой путь.

import tarfile

# архивируемый каталог
path = 'script/sql-script/'
# корневой путь в архиве
path_tar = 'add-script'

# добавление файла/каталога
with tarfile.TarFile('sample.tar', 'a') as tar:
    tar.add(path, path_tar)

Чтение контейнера .tar.

import tarfile

# чтение контейнера
with tarfile.TarFile('sample.tar') as tar:
    infos = tar.getmembers()
    for inf in infos:
        print(inf.name)

# sql-script
# sql-script/Script-5.sql
# sql-script/Script-1.sql
# sql-script/Script-3.sql
# sql-script/procedure.sql
# sql-script/Script-2.sql
# sql-script/Script-4.sql
# add-script
# add-script/Script-5.sql
# add-script/Script-1.sql
# add-script/Script-3.sql
# add-script/procedure.sql
# add-script/Script-2.sql
# add-script/Script-4.sql

Распаковка контейнера .tar в указанную директорию.

import tarfile, glob, os

extract_path = 'sql-tar'

# извлечение всех файлов/каталогов
with tarfile.TarFile('sample.tar') as tar:
    tar.extractall(extract_path)
    
# смотрим файлы в каталоге 'extract_tar'
path = os.path.join(extract_path, '**')
for file in glob.glob(path, recursive=True):
    print(file)
    
# sql-tar/
# sql-tar/sql-script
# sql-tar/sql-script/Script-5.sql
# sql-tar/sql-script/Script-1.sql
# sql-tar/sql-script/Script-3.sql
# sql-tar/sql-script/procedure.sql
# sql-tar/sql-script/Script-2.sql
# sql-tar/sql-script/Script-4.sql
# sql-tar/add-script
# sql-tar/add-script/Script-5.sql
# sql-tar/add-script/Script-1.sql
# sql-tar/add-script/Script-3.sql
# sql-tar/add-script/procedure.sql
# sql-tar/add-script/Script-2.sql
# sql-tar/add-script/Script-4.sql