Cómo comprimir archivos con zipfile en Python?

Publicado el martes, 11 de febrero del 2025

Comprimir una serie de archivos con el fin de ahorrar espacio en disco puede ser una tarea necesaria en tu trabajo diario con Python. En esta guía rápida, aprenderás cómo hacerlo.

El módulo zipfile de la biblioteca estándar de Python permite manipular archivos en formato ZIP que es un formato estándar para comprimir y archivar datos. Con este módulo, puedes crear, leer, escribir, extraer y listar archivos contenidos dentro de archivos ZIP.

Pasos resumidos

Para comprimir archivos usando el módulo zipfile en Python, puedes seguir los siguientes pasos:

  1. Importar el módulo zipfile.
  2. Instanciar la clase ZipFile en modo de escritura ("w") para crear un nuevo archivo ZIP.
  3. Elegir el método de compresión.
  4. Comprimir los archivos en el archivo ZIP usando el método .write().

Estos pasos te permitirán crear y comprimir archivos en un archivo ZIP utilizando Python. El código necesario es el siguiente:

import zipfile

with zipfile.ZipFile(
    "archivo.zip",
    mode="w",
    compression=zipfile.ZIP_DEFLATED
) as zip_file:
    zip_file.write("archivo_0.txt")
    zip_file.write("archivo_1.txt")

A continuación una discusión más detallada de cada uno de estos pasos y su código Python asociado.

Paso 1: Importar el módulo zipfile

Primero, necesitas importar el módulo zipfile en tu script:

import zipfile

Paso 2: Instanciar la clase ZipFile

La clase ZipFile funciona de modo similar a la función incorporada open() de Python, permitiéndote abrir archivos ZIP. Para instanciar la clase, emplearás tres argumentos:

  1. file: El nombre del archivo ZIP resultante.
  2. mode: El modo de apertura que puede ser modo de lectura ("r"), escritura ("w"), anexar ("a") y exclusivo ("x").
  3. compression: El método de compresión deseado.

Esta clase funciona como un gestor de contexto, por lo que puedes utilizarla dentro de una sentencia with. Como nombre de archivo, puedes emplear cualquier identificador de archivo válido en tu sistema operativo seguido de la extensión .zip.

Paso 3: Elegir el método de compresión

Para comprimir archivos mientras los escribes en un archivo ZIP, puedes usar alguno de los modos de compresión siguientes con la constante apropiada:

Método de compresión Constante Módulo requerido
Deflate zipfile.ZIP_DEFLATED zlib
Bzip2 zipfile.ZIP_BZIP2 bz2
LZMA zipfile.ZIP_LZMA lzma

Estos son los métodos de compresión que actualmente puedes usar con ZipFile. Usar un método diferente generará un NotImplementedError. El método más comúnmente usado es ZIP_DEFLATED.

Paso 4: Comprimir los archivos en el archivo ZIP

Ahora, supón que necesitas comprimir los archivos archivo_0.txt y archivo_1.txt que se encuentran en tu directorio de trabajo actual. Puedes lograrlo con el siguiente código:

with zipfile.ZipFile(
    "archivo.zip",
    mode="w",
    compression=zipfile.ZIP_DEFLATED
) as zip_file:
    zip_file.write("archivo_0.txt")
    zip_file.write("archivo_1.txt")

Este código crea un archivo ZIP llamado archivo.zip y lo abre en modo de escritura. Luego, utiliza el algoritmo Deflate para comprimir los archivos dentro del archivo ZIP. Dentro del bloque de la sentencia with, se agregan los archivos a comprimir utilizando el método .write().

Resumiendo

Para comprimir archivos usando el módulo zipfile en Python, puedes seguir los siguientes pasos:

  1. Importar el módulo zipfile.
  2. Instanciar la clase ZipFile en modo de escritura ("w") para crear un nuevo archivo ZIP.
  3. Elegir el método de compresión.
  4. Comprimir los archivos en el archivo ZIP usando el método .write().

Estos pasos te permiten crear un archivo ZIP y comprimir los archivos deseados utilizando Python.