Como posso criar um arquivo .tar.gz com compressão em Python?
python
compression
zip
tarfile
Shahjapan
fonte
fonte
Respostas:
Para construir um
.tar.gz
(aka.tgz
) para uma árvore de diretório inteira:Isso criará um arquivo tar compactado com gzip contendo uma única pasta de nível superior com o mesmo nome e conteúdo que
source_dir
.fonte
arcname=os.path.basename(source_dir)
, ele fornecerá toda a estrutura do caminho dosource_dir
arquivo tar (na maioria das situações, isso é provavelmente inconveniente).arcname=os.path.basename(source_dir)
ainda significa que o arquivo contém uma pasta que contém o conteúdo desource_dir
. Se quiser que a raiz do arquivo contenha o conteúdo em si, e não o conteúdo de uma pasta, usearcname=os.path.sep
.os.path.sep
, o arquivo conterá o serviço "." ou a pasta "/" que normalmente não é um problema, mas às vezes pode ser um problema se você processar este arquivo programaticamente posteriormente. Parece que a única maneira realmente limpa é fazeros.walk
e adicionar arquivos individualmentearcname='.'
. Não há necessidade de usaros.walk
.Se você deseja criar um arquivo compactado tar.bz2, basta substituir o nome da extensão do arquivo por ".tar.bz2" e "w: gz" por "w: bz2".
fonte
with tarfile.open( ..
em Python, em vez de chamaropen
eclose
manualmente. Este também é o caso ao abrir arquivos normais.Você chama tarfile.open com
mode='w:gz'
, que significa "Abrir para gravação compactada gzip."Você provavelmente vai querer terminar o nome do arquivo (o
name
argumento paraopen
) com.tar.gz
, mas isso não afeta as habilidades de compactação.BTW, você geralmente obtém uma melhor compactação com um modo de
'w:bz2'
, assim comotar
geralmente pode compactar ainda melhor combzip2
do que comgzip
.fonte
As respostas anteriores aconselham o uso do
tarfile
módulo Python para criar um.tar.gz
arquivo em Python. Obviamente, essa é uma boa solução no estilo Python, mas tem uma séria desvantagem na velocidade de arquivamento. Esta questão menciona quetarfile
é aproximadamente duas vezes mais lento que otar
utilitário do Linux. De acordo com minha experiência, essa estimativa é bastante correta.Portanto, para um arquivamento mais rápido, você pode usar o
tar
comando usingsubprocess
module:fonte
Neste arquivo tar.gz, compactar no diretório de visualização aberta. Em solve use os.path.basename (file_directory)
seu uso no arquivo tar.gz compactado no diretório
fonte
Além da resposta de @Aleksandr Tukallo, você também pode obter a saída e a mensagem de erro (se ocorrer). A compactação de uma pasta usando
tar
é explicada muito bem na resposta a seguir .fonte