ZIP y 7z: Formatos de Archivo — Estructura, Compresión y Mejores Prácticas
ZIP es el formato de archivo más universalmente comprendido — integrado en todos los sistemas operativos, soportado por todos los gestores de ficheros e instantáneamente reconocible. 7z entrega ratios de compresión significativamente mejores usando algoritmos modernos.
ZIP: Formato de Archivo Universal
ZIP fue creado por Phil Katz y publicado como especificación abierta en 1989. La elección de diseño que hizo a ZIP único: cada fichero dentro de un ZIP se comprime independientemente. Puedes extraer cualquier fichero individual sin descomprimir todo el archivo. Esta capacidad de acceso aleatorio, combinada con la especificación abierta del formato, hizo de ZIP el estándar de facto para la distribución de software.
Estructura del Fichero ZIP
Diseño del Fichero ZIP
├── Cabecera de Fichero Local 1
│ ├── Firma: PK\x03\x04
│ ├── Método de compresión (0=Almacenado, 8=Deflate, 14=LZMA, 20=Zstd)
│ ├── CRC-32
│ ├── Tamaño comprimido / sin comprimir
│ └── Nombre de fichero + Campos extra
├── Datos del fichero comprimido 1
├── Cabeceras de Fichero Local 2, 3, ... con sus datos
│
├── Directorio Central
│ └── Cabeceras del Directorio Central (una por fichero, todas al final)
│
└── Registro de Fin del Directorio Central (22 bytes mínimo)
├── Firma: PK\x05\x06
├── Número total de entradas
└── Desplazamiento al directorio central
El Directorio Central al final es por qué puedes listar contenidos ZIP y extraer ficheros individuales sin leer todo el archivo.
Métodos de Compresión ZIP
| Método | Código | Algoritmo | Notas |
|---|---|---|---|
| Almacenado | 0 | Ninguno | Sin compresión |
| Deflate | 8 | LZ77 + Huffman | Predeterminado para la mayoría de herramientas |
| LZMA | 14 | Cadena Lempel-Ziv-Markov | Algoritmo LZMA de 7-Zip en contenedor ZIP |
| Zstandard | 20 | ANS + LZ77 | Algoritmo moderno más rápido; nativo en Windows 11 |
Trabajar con ZIP en Python
import zipfile
from pathlib import Path
# ── Creación de archivos ZIP ─────────────────────
with zipfile.ZipFile('archivo.zip', 'w',
compression=zipfile.ZIP_DEFLATED,
compresslevel=6) as zf:
zf.write('documento.pdf', arcname='docs/documento.pdf')
raiz = Path('proyecto/')
for filepath in raiz.rglob('*'):
if filepath.is_file():
zf.write(filepath, arcname=str(filepath.relative_to(raiz.parent)))
zf.writestr('metadata.json', '{"version": "1.0", "creado": "2024-01-15"}')
# ── Lectura de archivos ZIP ─────────────────────
with zipfile.ZipFile('archivo.zip', 'r') as zf:
for info in zf.infolist():
ratio = (1 - info.compress_size / info.file_size) * 100 if info.file_size else 0
print(f"{info.filename:40s} {info.file_size:>10,} → {info.compress_size:>10,} ({ratio:.1f}%)")
zf.extract('docs/documento.pdf', path='./extraido/')
zf.extractall(path='./salida/')
with zf.open('metadata.json') as f:
contenido = f.read().decode('utf-8')
# ── Verificar integridad ZIP ─────────────────────
with zipfile.ZipFile('archivo.zip', 'r') as zf:
ficheros_malos = zf.testzip()
if ficheros_malos:
print(f"Primer fichero defectuoso: {ficheros_malos}")
else:
print("Archivo OK")
7z: El Formato de Archivo de Alta Compresión
7z es el formato nativo de 7-Zip, desarrollado por Igor Pavlov y lanzado por primera vez en 1999. El formato fue diseñado desde el principio para la máxima compresión — utiliza el algoritmo de compresión LZMA2.
Comparativa de Compresión 7z vs ZIP
| Tipo de archivo | Fichero | Tamaño comprimido | Ratio |
|---|---|---|---|
| ZIP (Deflate -6) | 100 MB texto | ~38 MB | 62% |
| 7z (LZMA2 -5) | 100 MB texto | ~22 MB | 78% |
| 7z (LZMA2 -9) | 100 MB texto | ~19 MB | 81% |
Línea de Comandos 7-Zip
# Crear archivo 7z (compresión LZMA2 por defecto)
7z a archivo.7z ficheros/
# Crear con máxima compresión (-mx=9) y modo sólido (-ms=on)
7z a -mx=9 -ms=on archivo.7z ficheros/
# Crear archivo protegido con contraseña (cifrado AES-256)
7z a -p"MiContraseñaSecreta" -mhe=on archivo.7z ficheros/
# -mhe=on cifra las cabeceras de fichero (oculta los nombres)
# Crear ZIP con 7-Zip (mejor compresión que el predeterminado del SO)
7z a -tzip archivo.zip ficheros/
# Extraer archivo
7z x archivo.7z -o./salida/
# Listar contenidos del archivo
7z l archivo.7z
# Verificar integridad del archivo
7z t archivo.7z
# Dividir archivo en volúmenes (100 MB cada uno)
7z a -v100m archivo.7z directorio_grande/
Internos del Formato 7z
7z usa un diseño sin cabecera fija — a diferencia de ZIP, no hay directorio central en una ubicación fija. En su lugar, todos los metadatos (nombres de fichero, tamaños, atributos, marcas de tiempo) se almacenan en un único bloque de Cabecera comprimido al final del fichero.
Esto habilita la compresión sólida — comprimir todos los ficheros juntos como un único bloque, permitiendo que el diccionario de LZMA2 encuentre coincidencias entre límites de ficheros. La compresión sólida puede reducir el tamaño del archivo un 30–50% adicional para ficheros de tipo similar.
Comparativa de Formatos de Archivo
| Formato | Compresión | Ratio | Plataforma | Cifrado | Sólido |
|---|---|---|---|---|---|
| ZIP | Deflate | Base | Universal | AES-256 / ZipCrypto (débil) | No |
| 7z | LZMA2/PPMd | Mejor | Universal | AES-256 | Sí |
| TAR.GZ | Gzip | Bueno | Unix | Ninguno | Sí (todo) |
| TAR.BZ2 | Bzip2 | Mejor | Unix | Ninguno | Sí |
| TAR.XZ | XZ/LZMA2 | Excelente | Unix | Ninguno | Sí |
Cuándo Usar Cada Formato
Usa ZIP cuando:
- Compartes con usuarios Windows/macOS que necesitan abrir sin instalar software
- Los ficheros ya están comprimidos (JPEG, MP4, DOCX)
- Necesitas acceso aleatorio a ficheros individuales sin extracción completa
Usa 7z cuando:
- El ratio de compresión máximo es la prioridad (copias de seguridad, archivo)
- Los ficheros son texto/código/datos comprimibles
- Se requiere cifrado AES-256 con cifrado de cabeceras
- Compresión sólida entre muchos ficheros similares
Usa TAR.GZ / TAR.XZ cuando:
- La plataforma objetivo es Linux/macOS
- Preservar permisos Unix de fichero y propiedad es importante
Resumen
La compatibilidad universal de ZIP lo convierte en la elección correcta para la distribución de ficheros e intercambio entre usuarios. La compresión LZMA2 de 7z y el modo sólido lo convierten en la elección correcta para archivo y copia de seguridad cuando el tamaño del fichero importa.
Conversiones relacionadas
Conversiones de archivos comprimidos más usadas: