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