¿Cómo puedo crear un archivo .tar.gz con compresión en Python?
python
compression
zip
tarfile
shahjapan
fuente
fuente
Respuestas:
Para construir un
.tar.gz
(alias.tgz
) para un árbol de directorios completo:Esto creará un archivo tar comprimido con gzip que contiene una única carpeta de nivel superior con el mismo nombre y contenido que
source_dir
.fuente
arcname=os.path.basename(source_dir)
, le dará la estructura de ruta completa delsource_dir
archivo tar (en la mayoría de las situaciones, eso probablemente sea un inconveniente).arcname=os.path.basename(source_dir)
still significa que el archivo contiene una carpeta que contiene el contenido desource_dir
. Si desea que la raíz del archivo contenga el contenido en sí mismo y no el contenido dentro de una carpeta, utilicearcname=os.path.sep
en su lugar.os.path.sep
, entonces el archivo contendrá el servicio "." o carpeta "/" que no suele ser un problema, pero a veces puede ser un problema si luego procesa este archivo mediante programación. Parece que la única forma realmente limpia es haceros.walk
y agregar archivos individualmentearcname='.'
. No es necesario usarloos.walk
.Si desea crear un archivo comprimido tar.bz2, simplemente reemplace el nombre de la extensión del archivo con ".tar.bz2" y "w: gz" con "w: bz2".
fuente
with tarfile.open( ..
en Python, en lugar de llamaropen
yclose
manualmente. Este también es el caso al abrir archivos normales.Usted llama tarfile.open con
mode='w:gz'
, que significa "Abierto para escritura comprimida gzip".Probablemente desee terminar el nombre de archivo (el
name
argumento deopen
) con.tar.gz
, pero eso no afecta las capacidades de compresión.Por cierto, generalmente obtienes una mejor compresión con un modo de
'w:bz2'
, al igualtar
que normalmente se puede comprimir incluso mejorbzip2
de lo que se puede comprimirgzip
.fuente
Las respuestas anteriores aconsejan usar el
tarfile
módulo de Python para crear un.tar.gz
archivo en Python. Obviamente, es una buena solución al estilo de Python, pero tiene un serio inconveniente en la velocidad de archivo. Esta pregunta menciona quetarfile
es aproximadamente dos veces más lento que eltar
utilidad en Linux. Según mi experiencia, esta estimación es bastante correcta.Entonces, para un archivado más rápido, puede usar el
tar
comando usando elsubprocess
módulo:fuente
En este archivo tar.gz, comprimir en el directorio de vista abierta En solve, use os.path.basename (file_directory)
su uso en el archivo tar.gz comprimir en el directorio
fuente
Además de la respuesta de @Aleksandr Tukallo, también puede obtener la salida y el mensaje de error (si ocurre). La compresión de una carpeta usando
tar
se explica bastante bien en la siguiente respuesta .fuente