все Python 3tarfileфункция
tarfile.open()
архивы tar
Открывает tar-архив для чтения или записи и возвращает TarFile; режим задаёт сжатие: 'w:gz', 'r:*', 'r|gz'.
Синтаксис
tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)
При чтении 'r' сам угадывает сжатие, а при записи 'w' создаёт несжатый .tar — даже если имя кончается на .tar.gz; сжатие нужно указать: 'w:gz', 'w:bz2', 'w:xz'. Распаковывать чужой архив без фильтра опасно: имя '../x' или ссылка наружу пишут мимо целевой папки. До 3.14 extractall() по умолчанию доверял архиву целиком (на 3.12–3.13 с DeprecationWarning), поэтому передавайте filter='data' явно.
Примеры
import tarfile
with open('report.txt', 'w', encoding='utf-8') as f:
f.write('итоги')
with tarfile.open('backup.tar.gz', 'w:gz') as tar:
tar.add('report.txt')
with tarfile.open('backup.tar.gz') as tar:
print(tar.getnames()) # → ['report.txt']
tar.extractall('restored', filter='data')
with open('restored/report.txt', encoding='utf-8') as f:
print(f.read()) # → итоги
import tarfile
with open('a.txt', 'w', encoding='utf-8') as f:
f.write('x' * 1000)
with tarfile.open('plain.tar.gz', 'w') as tar:
tar.add('a.txt')
try:
tarfile.open('plain.tar.gz', 'r:gz')
except tarfile.ReadError as e:
print(e) # → not a gzip file — режим 'w' не сжимал
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности