Cómo podría comprimir una carpeta desde el cmd o por python?
Para crear un nuevo archivo, nuevamente nos basamos en el módulo zipfile en Python, solo necesitamos instanciar un nuevo objeto en modo escritura y utilizar el método write.
import zipfile
print 'Creando el archivo Zip'
zf = zipfile.ZipFile('nombre_archivo.zip', mode='w')
try:
print 'Agregamos un archivo'
zf.write('archivo.extension')
finally:
print 'Cerrando archivo'
zf.close()
Añadiendo Archivos a un ZIP existente
Una vez creados los nuevos archivos ZIP, podemos actualizar su contenido, añadiendo nuevos al final del mismo. Para poder hacerlo debemos abrir el archivo ZIP en modo 'a' de append.
print 'Agregando un nuevo archivo al ZIP'
zf = zipfile.ZipFile('archivo.zip', mode='a')
try:
zf.write('otro_archivo.txt')
finally:
zf.close()
Añadiendo Compresión
El snippet anterior nos añade los archivos que deseemos al archivo ZIP pero sin la compresión, si queremos comprimir los archivos que añadimos (es la idea del archivo ZIP), utilizamos el módulo zlib. Podemos utilizar la compresión para archivos de forma individual o para todo el archivo ZIP utilizando los modos ZIP_DEFLATED (Compresión básica) o el modo por defecto ZIP_STORED (Sin Compresión).
import zipfile
import zlib
compresion = zipfile.ZIP_DEFLATED
print 'Creando Archivo'
zf = zipfile.ZipFile('archivo.zip', mode='w')
try:
print 'Agregando archivo con compresion standard', compresion
zf.write('archivo.extension', compress_type=compresion)
finally:
print 'Cerrando Archivo'
zf.close()
Cambiando los nombres de los archivos que se añaden por otros
Podemos cambiar los nombres de los archivos que añadimos al archivo ZIP por otros utilizando el parámetro arcname en el método write.
import zipfile
zf = zipfile.ZipFile('archivo.zip', mode='w')
try:
zf.write('leeme.txt', arcname='lee_esto.txt')
finally:
zf.close()
Creando archivos desde otras fuentes de datos
Muchas veces (cuando enviamos archivos por la red, por ejemplo) necesitamos crear y escribir un archivo ZIP utilizando datos que no provienen de algún archivo almacenado en disco, para esto podemos utilizar el método writestr, que añadirá una cadena de bytes directamente.
import zipfile
mensaje = 'Esta informacion no existe en ningun archivo almacenado en disco'
zf = zipfile.ZipFile('archivo.zip',mode='w',compression=zipfile.ZIP_DEFLATED)
try:
zf.writestr('archivo_inexistente.txt', mensaje)
finally:
zf.close()
Fuente: elclubdelprogramador.com
Para hacerlo con cmd (Batch):
zip -r -9 "c:\carpeta.zip" "carpeta"
Grax