Как создать файл .tar.gz со сжатием в Python?
Как создать полный сжатый файл tar с помощью 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 сжатии файлов в каталоге