archivos - ¿Cómo puedo comprimir el contenido de una carpeta usando Python(versión 2.5)?
comprimir archivos con python (3)
Una vez que tengo todos los archivos que necesito en una carpeta en particular, me gustaría que mi secuencia de comandos python comprima el contenido de la carpeta.
es posible?
¿Y cómo podría hacerlo?
Aquí hay una versión recursiva
def zipfolder(path, relname, archive):
paths = os.listdir(path)
for p in paths:
p1 = os.path.join(path, p)
p2 = os.path.join(relname, p)
if os.path.isdir(p1):
zipfolder(p1, p2, archive)
else:
archive.write(p1, p2)
def create_zip(path, relname, archname):
archive = zipfile.ZipFile(archname, "w", zipfile.ZIP_DEFLATED)
if os.path.isdir(path):
zipfolder(path, relname, archive)
else:
archive.write(path, relname)
archive.close()
La versión adaptada del script es:
#!/usr/bin/env python
from __future__ import with_statement
from contextlib import closing
from zipfile import ZipFile, ZIP_DEFLATED
import os
def zipdir(basedir, archivename):
assert os.path.isdir(basedir)
with closing(ZipFile(archivename, "w", ZIP_DEFLATED)) as z:
for root, dirs, files in os.walk(basedir):
#NOTE: ignore empty directories
for fn in files:
absfn = os.path.join(root, fn)
zfn = absfn[len(basedir)+len(os.sep):] #XXX: relative path
z.write(absfn, zfn)
if __name__ == ''__main__'':
import sys
basedir = sys.argv[1]
archivename = sys.argv[2]
zipdir(basedir, archivename)
Ejemplo:
C:/zipdir> python -mzipdir c:/tmp/test test.zip
Crea ''C:/zipdir/test.zip''
archivo ''C:/zipdir/test.zip''
con el contenido del directorio ''c:/tmp/test''
.
En python 2.7 puede usar: shutil.make_archive (nombre base, formato [, directorio_raíz [, directorio_base [, directorio detallado [, directorio_de_ruta [, propietario [, grupo [, registro]]]]]]) .
nombre base nombre de archivo menos extensión
formato de formato del archivo
directorio raíz_dir para comprimir.
Por ejemplo
shutil.make_archive(target_file, format="bztar", root_dir=compress_me)