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

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

Использование объекта TarInfo

Синтаксис:

import tarfile

info = tarfile.TarInfo(name="")

Параметры:

  • name='' -

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

Описание:

Класс TarInfo() модуля tarfile создает объект TarInfo. Объекты TarInfo возвращаются методами TarFile.getmember(), TarFile.getmembers() и TarFile.gettarinfo().

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


Методы класса tarfile.TarInfo.

tarfile.TarInfo.frombuf(buf, encoding, errors):

Метод класса tarfile.TarInfo.frombuf() создает и возвращает объект TarInfo из строки буфера buf.

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

tarfile.TarInfo.fromtarfile(tarfile):

Метод класса tarfile.TarInfo.fromtarfile() читает следующий элемент из объекта TarFile и возвращает его как объект TarInfo.

Объект TarInfo.

объекта TarInfo.

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

Метод TarInfo.tobuf() создает строковый буфер из объекта TarInfo. Для получения информации об аргументах метода смотрите конструктор класса TarFile.

Открытые атрибуты объекта TarInfo.

TarInfo.name:

Атрибут TarInfo.name - имя элемента архива.

TarInfo.size:

Атрибут TarInfo.size - размер в байтах.

TarInfo.mtime:

Атрибут TarInfo.mtime - время последнего изменения в секундах с начала эпохи, как в os.stat_result.st_mtime.

Изменено в версии 3.12: Может быть установлено значение None для TarInfo.extract() и TarInfo.extractall(), что приводит к пропуску применения этого атрибута при извлечении.

TarInfo.mode:

Атрибут TarInfo.mode биты разрешения как в os.chmod().

Изменено в версии 3.12: Может быть установлено значение None для TarInfo.extract() и TarInfo.extractall(), что приводит к пропуску применения этого атрибута при извлечении.

TarInfo.type:

Атрибут TarInfo.type тип файла. Тип обычно является одной из следующих констант:

  • REGTYPE,
  • AREGTYPE,
  • LNKTYPE,
  • SYMTYPE,
  • DIRTYPE,
  • FIFOTYPE,
  • CONTTYPE,
  • CHRTYPE,
  • BLKTYPE,
  • GNUTYPE_SPARSE.

Для более удобного определения типа объекта TarInfo используйте методы is*() ниже.

TarInfo.linkname:

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

TarInfo.uid:

Атрибут TarInfo.uid - идентификатор пользователя, который изначально сохранил этот элемент архива.

Изменено в версии 3.12: Может быть установлено значение None для TarInfo.extract() и TarInfo.extractall(), что приводит к пропуску применения этого атрибута при извлечении.

TarInfo.gid:

Атрибут TarInfo.gid - идентификатор группы пользователя, который изначально сохранил этот элемент архива.

Изменено в версии 3.12: Может быть установлено значение None для TarInfo.extract() и TarInfo.extractall(), что приводит к пропуску применения этого атрибута при извлечении.

TarInfo.uname:

Атрибут TarInfo.uname - имя пользователя, который изначально сохранил этот элемент архива.

Изменено в версии 3.12: Может быть установлено значение None для TarInfo.extract() и TarInfo.extractall(), что приводит к пропуску применения этого атрибута при извлечении.

TarInfo.gname:

Атрибут TarInfo.gname - имя группы, под которым изначально сохранили этот элемент архива.

Изменено в версии 3.12: Может быть установлено значение None для TarInfo.extract() и TarInfo.extractall(), что приводит к пропуску применения этого атрибута при извлечении.

TarInfo.pax_headers:

Атрибут TarInfo.pax_headers - словарь, содержащий пары ключ-значение связанного расширенного заголовка pax.

TarInfo.replace(name=..., mtime=..., mode=..., linkname=..., uid=..., gid=..., uname=..., gname=..., deep=True):

Новое в версии 3.12.

Метод TarInfo.replace() возвращает новую копию объекта TarInfo с измененными заданными атрибутами. Например, чтобы вернуть TarInfo с именем группы, установленным на staff, используйте:

new_tarinfo = old_tarinfo.replace(gname='staff')

По умолчанию создается глубокая копия. Если deep имеет значение False, то копия является мелкой, т. е. TarInfo.pax_headers и любые пользовательские атрибуты используются совместно с исходным объектом TarInfo.

Методы-запросы объекта TarInfo.

TarInfo.isfile():

Метод TarInfo.isfile() возвращает True, если объект Tarinfo является обычным файлом.

TarInfo.isreg():

Метод TarInfo.isreg() то же, что и TarInfo.isfile().

TarInfo.isdir():

Метод TarInfo.isdir() возвращает True, если это каталог.

TarInfo.issym():

Метод TarInfo.issym() возвращает True, если это символическая ссылка.

TarInfo.islnk():

Метод TarInfo.islnk() возвращает True, если это жесткая ссылка.

TarInfo.ischr():

Метод TarInfo.ischr() возвращает True, если это символьное устройство.

TarInfo.isblk():

Метод TarInfo.isblk() возвращает True, если это блочное устройство.

TarInfo.isfifo():

Метод TarInfo.isfifo() возвращает True, если это FIFO.

TarInfo.isdev():

Метод TarInfo.isdev() возвращает True, если это одно из символьного устройства, блочного устройства или FIFO.

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

import tarfile

# сначала создадим архив
path = 'script/sql-script/'
with tarfile.TarFile.open('sample.tar.gz', 'w:gz') as tar:
    tar.add(path)

list_attr = ['name', 'size', 'mtime', 'mode', 'type', 
            'linkname', 'uid', 'gid', 'uname', 'gname']

with tarfile.TarFile.open('sample.tar.gz') as tar:
    # второй элемент архива
    info = tar.getmembers()[1]
    for attr in list_attr:
        # выведем все атрибуты 
        x = getattr(info, attr, None)
        print(attr, '=', x)
    print('isfile =>', info.isfile())
    print('isdir =>', info.isdir())

# name = script/sql-script/Script-5.sql
# size = 2687
# mtime = 1568437638
# mode = 436
# type = b'0'
# linkname = 
# uid = 1000
# gid = 1000
# uname = docs-python
# gname = docs-python
# isfile => True
# isdir => False

Теперь изменим некоторые атрибуты при создании архива. Сбросим информацию о пользователе, используя аргумент фильтра в методе TarFile.add().

import tarfile

def reset(tarinfo):
    "Сбрасывает информацию о пользователе"
    tarinfo.uid = tarinfo.gid = 0
    tarinfo.uname = tarinfo.gname = "root"
    return tarinfo

path = 'script/sql-script/'
with tarfile.open("sample.tar.gz", "w:gz") as tar:
    tar.add(path, filter=reset)

with tarfile.TarFile.open('sample.tar.gz') as tar:
    print(tar.list())

# ?rwxrwxr-x root/root          0 2020-05-18 14:33:18 script/sql-script/ 
# ?rw-rw-r-- root/root       2687 2019-09-14 08:07:18 script/sql-script/Script-5.sql 
# ?rw-rw-r-- root/root       1371 2019-09-14 08:06:38 script/sql-script/Script-1.sql 
# ?rw-rw-r-- root/root         50 2019-09-14 08:00:46 script/sql-script/Script-3.sql 
# ?rw-rw-r-- root/root       3394 2019-09-14 08:07:34 script/sql-script/procedure.sql 
# ?rw-rw-r-- root/root       1130 2019-09-14 08:06:30 script/sql-script/Script-2.sql 
# ?rw-rw-r-- root/root       1163 2019-09-14 08:06:31 script/sql-script/Script-4.sql 
# None