Как создать полный сжатый файл tar с помощью Python?

Как создать файл .tar.gz со сжатием в Python?

Ответ 1

Чтобы создать .tar.gz (aka .tgz) для всего дерева каталогов:

import tarfile

def make_tarfile(output_filename, source_dir):
    with tarfile.open(output_filename, "w:gz") as tar:
        tar.add(source_dir, arcname=os.path.basename(source_dir))

Ответ 2

import tarfile
tar = tarfile.open("sample.tar.gz", "w:gz")
for name in ["file1", "file2", "file3"]:
    tar.add(name)
tar.close()

Если вы хотите создать сжатый файл tar.bz2, просто замените имя расширения файла ".tar.bz2" и "w: gz" на "w: bz2".

Ответ 3

Вы вызываете tarfile.open с mode='w:gz', что означает "Открыть для сжатого письма gzip".

Вероятно, вы захотите закончить имя файла (аргумент name до open) с помощью .tar.gz, но это не влияет на возможности сжатия.

Кстати, вы обычно получаете лучшее сжатие с режимом 'w:bz2', так же как tar может сжиматься даже лучше с bzip2, чем он может сжимать с помощью gzip.

Ответ 4

В предыдущих ответах рекомендуется использовать модуль python tarfile для создания файла .tar.gz в python. Это, очевидно, хорошее решение в стиле Python, хотя оно имеет серьезный недостаток в скорости архивирования. В этом вопросе упоминается, что tarfile примерно в два раза медленнее, чем вызов прямой команды в Linux. По моему опыту эта оценка довольно верна.

Поэтому для более быстрого архивирования вы можете использовать прямую команду Linux с помощью модуля subprocess:

subprocess.call(['tar', '-czf', output_filename, file_to_archive])

Ответ 5

В этом Сжатие файла tar.gz в директории открытого просмотра В решении используйте os.path.basename(file_directory)

with tarfile.open("save.tar.gz","w:gz"):
      for file in ["a.txt","b.log","c.png"]:
           tar.add(os.path.basename(file))

его использование в tar.gz сжатии файлов в каталоге