Как я могу создать файл .tar.gz со сжатием в Python?
python
compression
zip
tarfile
Шахджапан
источник
источник
Ответы:
Чтобы построить
.tar.gz
(иначе.tgz
) для всего дерева каталогов:Это создаст сжатый tar-архив, содержащий одну папку верхнего уровня с тем же именем и содержимым, что и
source_dir
.источник
arcname=os.path.basename(source_dir)
укажете, он предоставит вам всю структуру путейsource_dir
в tar-файле (в большинстве случаев это, вероятно, неудобно).arcname=os.path.basename(source_dir)
still означает, что в архиве есть папка с содержимымsource_dir
. Если вы хотите, чтобы корень архива содержал само содержимое, а не содержимое папки, используйтеarcname=os.path.sep
вместо этого.os.path.sep
, то в архиве будет сервис "." или папка «/», что обычно не является проблемой, но иногда это может быть проблемой, если вы позже обработаете этот архив программно. Кажется, единственный настоящий чистый способ -os.walk
arcname='.'
. Не нужно использоватьos.walk
.Если вы хотите создать сжатый файл tar.bz2, просто замените имя расширения файла на «.tar.bz2» и «w: gz» на «w: bz2».
источник
with tarfile.open( ..
Python, а не вызыватьopen
иclose
вручную. То же самое и при открытии обычных файлов.Вы вызываете tarfile.open с помощью
mode='w:gz'
, что означает «Открыть для записи в сжатом gzip».Вы, вероятно, захотите закончить имя файла (
name
аргументopen
) на.tar.gz
, но это не влияет на возможности сжатия.Кстати, вы обычно получаете лучшее сжатие с режимом
'w:bz2'
, так же какtar
обычно может сжиматься даже лучше,bzip2
чем сgzip
.источник
В предыдущих ответах рекомендуется использовать
tarfile
модуль Python для создания.tar.gz
файла в Python. Очевидно, что это хорошее решение в стиле Python, но у него есть серьезный недостаток в скорости архивирования. В этом вопросе упоминается, чтоtarfile
это примерно в два раза медленнее, чемtar
утилита в Linux. По моему опыту, эта оценка вполне верна.Итак, для более быстрого архивирования вы можете использовать
tar
команду usingsubprocess
module:источник
В этом tar.gz файл сжимается в каталоге открытого просмотра. В решении используется os.path.basename (file_directory)
его использование в файле tar.gz сжать в каталоге
источник
В дополнение к ответу @Aleksandr Tukallo вы также можете получить вывод и сообщение об ошибке (если происходит). Сжатие папки с использованием
tar
довольно хорошо объясняется в следующем ответе .источник