2010-01-09 27 views

Respuesta

100

para construir un .tar.gz (también conocido como .tgz) para un árbol de directorios:

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)) 
+9

Al igual que una nota para los lectores, si omites 'arcname = os.path.basename (source_dir)' entonces te dará la estructura de ruta completa de 'source_dir' en el archivo tar (en la mayoría de las situaciones, eso es probablemente un inconveniente). – Shule

+0

nombre global 'tarfile' no está definido – NDEthos

+2

'import tarfile' –

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

Si desea crear un archivo comprimido tar.bz2, basta con sustituir el nombre del archivo de extensión con" Tar.bz2" y 'w: gz' con 'w: bz2'.

+1

Realmente debería usar 'con tarfile.open (..' en Python, en lugar de llamar' abrir' y 'cerrar' manualmente. Este es también el caso cuando se abren archivos regulares. – Sheljohn

28

Llama a tarfile.open con mode='w:gz', lo que significa "Abrir para escribir en gzip comprimido".

Probablemente querrá terminar el nombre de archivo (el argumento name en) con .tar.gz, pero eso no afecta las capacidades de compresión.

Por cierto, por lo general obtener una mejor compresión con un modo de 'w:bz2', al igual que tar usualmente puede comprimir aún mejor con bzip2 de lo que puede comprimir con gzip.

+4

Solo una nota rápida que el nombre del archivo para bzip2- tarballs comprimidos deben terminar con ".tar.bz2". –

Cuestiones relacionadas