Módulo Python Zipfile
De la documentación de Python 3
Este módulo proporciona herramientas para crear, leer, escribir, añadir y listar un archivo ZIP.
Lectura de archivos ZIP
import zipfile
# Abrir archivo ZIP y leer su contenido
with zipfile.ZipFile('example.zip') as example_zip:
# Listar todos los archivos y directorios en el ZIP
print(example_zip.namelist())
# Obtener metadatos para un archivo específico
spam_info = example_zip.getinfo('spam.txt')
# Imprimir tamaño original del archivo
print(spam_info.file_size)
# Imprimir tamaño del archivo comprimido
print(spam_info.compress_size)
# Calcular la relación de compresión
print('El archivo comprimido es %sx más pequeño!' % (round(spam_info.file_size / spam_info.compress_size, 2)))
['spam.txt', 'cats/', 'cats/catnames.txt', 'cats/zophie.jpg']
13908
3828
El archivo comprimido es 3.63x más pequeño!
Extracción de archivos ZIP
El método extractall() para objetos ZipFile extrae todos los archivos y carpetas de un archivo ZIP al directorio de trabajo actual.
# Extraer todos los archivos del ZIP al directorio actual
with zipfile.ZipFile('example.zip') as example_zip:
example_zip.extractall()
El método extract() para objetos ZipFile extraerá un único archivo del archivo ZIP:
# Extraer un único archivo del ZIP
with zipfile.ZipFile('example.zip') as example_zip:
# Extraer al directorio actual (devuelve la ruta)
print(example_zip.extract('spam.txt'))
# Extraer a un directorio específico
print(example_zip.extract('spam.txt', '/tmp/some/new/folders'))
/tmp/spam.txt
/tmp/some/new/folders/spam.txt
Creación y adición a archivos ZIP
import zipfile
# Crear un nuevo archivo ZIP y añadirle un archivo
with zipfile.ZipFile('new.zip', 'w') as new_zip:
# Añadir archivo con compresión
new_zip.write('spam.txt', compress_type=zipfile.ZIP_DEFLATED)
Este código creará un nuevo archivo ZIP llamado new.zip que contiene el contenido comprimido de spam.txt.
Lectura de metadatos de archivos ZIP
Obtener los nombres de archivo con namelist()
import zipfile
# Leer archivo ZIP y listar todos los nombres de archivo
with zipfile.ZipFile('example.zip', 'r') as zf:
print(zf.namelist())
['README.txt']
Obtener todos los metadatos con infolist()
import datetime
import zipfile
# Obtener metadatos detallados para todos los archivos en el ZIP
with zipfile.ZipFile('example.zip') as zf:
for info in zf.infolist():
# Determinar el sistema operativo (0 = Windows, 3 = Unix)
system = 'Windows' if info.create_system == 0 else 'Unix'
# Convertir la tupla date_time a objeto datetime
modified = datetime.datetime(*info.date_time)
print(info.filename)
print(f'Comentario : {info.comment}')
print(f'Modificado : {modified}')
print(f'Sistema : {system}')
print(f'Versión ZIP : {info.create_version}')
print(f'Comprimido : {info.compress_size} bytes')
print(f'Sin comprimir: {info.file_size} bytes')
README.txt
Comentario : b''
Modificado : 2022-11-15 06:48:02
Sistema : Unix
Versión ZIP : 30
Comprimido : 65 bytes
Sin comprimir: 76 bytes