gzip – Soporte para archivos gzip¶
On noviembre 24, 2021 by adminCódigo fuente: Lib/gzip.py
Este módulo proporciona una interfaz sencilla para comprimir y descomprimir archivos tal y como lo harían los programas GNU gzip y gunzip.
La compresión de datos la proporciona el módulo zlib
.
El módulo gzip
proporciona la clase GzipFile
, así como las funciones de convenienciaopen()
, compress()
y decompress()
.La clase GzipFile
lee y escribe archivos con formato gzip, comprimiendo o descomprimiendo automáticamente los datos para que parezcan un objeto de archivo ordinario.
Tenga en cuenta que los formatos de archivo adicionales que pueden ser descomprimidos por los programasgzip y gunzip, como los producidos porcompress y pack, no son compatibles con este módulo.
El módulo define los siguientes elementos:
gzip.
open
(filename, mode=’rb’, compresslevel=9, encoding=None, errors=None, newline=None)¶
Abre un archivo comprimido con gzip en modo binario o de texto, devolviendo un fileobject.
El argumento nombre de archivo puede ser un nombre de archivo real (un objeto str
obytes
), o un objeto de archivo existente para leer o escribir.
El argumento modo puede ser cualquiera de 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
o 'xb'
para el modo binario, o 'rt'
,'at'
, 'wt'
, o 'xt'
para el modo texto. El valor por defecto es 'rb'
.
El argumento compresslevel es un entero de 0 a 9, como para el constructorGzipFile
.
Para el modo binario, esta función es equivalente al constructor GzipFile
: GzipFile(filename, mode, compresslevel)
. En este caso, los argumentos de codificación, errores y nueva línea no deben ser proporcionados.
Para el modo texto, se crea un objeto GzipFile
, y se envuelve en una instanciaio.TextIOWrapper
con la codificación especificada, el comportamiento de tratamiento de errores y el/los final/es de línea.
Cambiado en la versión 3.3: Se ha añadido soporte para que el nombre de archivo sea un objeto de archivo, soporte para el modo texto, y los argumentos de codificación, errores y nueva línea.
Cambiado en la versión 3.4: Se ha añadido soporte para los modos 'x'
, 'xb'
y 'xt'
.
Cambiado en la versión 3.6: Acepta un objeto tipo ruta.
excepcióngzip.
BadGzipFile
¶
Una excepción lanzada para archivos gzip no válidos. Hereda de OSError
.EOFError
y zlib.error
también puede ser levantado para gzipfiles inválidos.
Nuevo en la versión 3.8.
clasegzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Constructor de la clase GzipFile
, que simula la mayoría de los métodos de un objeto archivo, con la excepción del método truncate()
. Al menos uno de fileobj y filename debe tener un valor no trivial.
La nueva instancia de la clase se basa en fileobj, que puede ser un archivo normal, un objetoio.BytesIO
, o cualquier otro objeto que simule un archivo. Por defecto es None
, en cuyo caso filename se abre para proporcionar un objeto archivo.
Cuando fileobj no es None
, el argumento filename sólo se utiliza para ser incluido en la cabecera del archivo gzip, que puede incluir el nombre original del archivo sin comprimir. Por defecto es el nombre de archivo de fileobj, si es discernible; de lo contrario, es la cadena vacía, y en este caso el nombre original del archivo no se incluye en la cabecera.
El argumento mode puede ser cualquiera de 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
, o 'xb'
, dependiendo de si el archivo será leído o escrito. El valor por defecto es el modo de fileobj si es discernible; de lo contrario, el valor por defecto es 'rb'
. En futuras versiones de Python no se utilizará el modo de fileobj. Es mejor especificar siempre el modo para la escritura.
Tenga en cuenta que el archivo siempre se abre en modo binario. Para abrir un archivo comprimido en modo texto, use open()
(o envuelva su GzipFile
con unio.TextIOWrapper
).
El argumento compresslevel es un entero de 0
a 9
que controla el nivel de compresión; 1
es el más rápido y produce la menor compresión, y 9
es el más lento y produce la mayor compresión. 0
es sin compresión. El valor predeterminado es 9
.
El argumento mtime es una marca de tiempo numérica opcional que se escribirá en el campo de la última modificación del flujo cuando se comprima. Sólo debe proporcionarse en modo de compresión. Si se omite o None
, se utiliza la hora actual. Vea el atributo mtime
para más detalles.
Llamar al método close()
de un objeto GzipFile
no cierra el archivoobj, ya que podría desear añadir más material después de los datos comprimidos. Esto también le permite pasar un objeto io.BytesIO
abierto para escribir como fileobj, y recuperar el buffer de memoria resultante utilizando el método getvalue()
del objeto io.BytesIO
.
GzipFile
soporta la interfaz io.BufferedIOBase
, incluyendo la iteración y la sentencia with
. Sólo el método truncate()
no está implementado.
GzipFile
también proporciona el siguiente método y atributo:
peek
(n)¶
Lee n bytes sin comprimir sin avanzar la posición del archivo.Como máximo se realiza una única lectura en el flujo comprimido para satisfacer la llamada. El número de bytes devueltos puede ser mayor o menor que el solicitado.
Nota
Aunque la llamada a peek()
no cambia la posición de archivo del GzipFile
, puede cambiar la posición del objeto de archivo subyacente (por ejemplo si el GzipFile
fue construido con el parámetrofileobj).
Nuevo en la versión 3.2.
mtime
¶
Cuando se descomprime, el valor del campo de tiempo de la última modificación en la cabecera leída más recientemente puede ser leído desde este atributo, como un entero. El valor inicial antes de leer cualquier cabecera es None
.
Todos los flujos comprimidos con gzip deben contener este campo de hora. Algunos programas, como gunzip, hacen uso de la marca de tiempo. El formato es el mismo que el valor de retorno de time.time()
y el atributo st_mtime
del objeto devuelto por os.stat()
.
Cambiado en la versión 3.1: Se ha añadido soporte para la sentencia with
, junto con el argumento del constructor de tiempo y el atributo mtime
.
Cambiado en la versión 3.2: Se ha añadido soporte para archivos con relleno cero y no buscables.
Cambiado en la versión 3.3: Se ha implementado el método io.BufferedIOBase.read1()
.
Cambiado en la versión 3.4: Se ha añadido soporte para los modos 'x'
y 'xb'
.
Cambiado en la versión 3.5: Se ha añadido soporte para escribir objetos tipobytes arbitrarios.El método read()
acepta ahora un argumento deNone
.
Cambiado en la versión 3.6: Acepta un objeto tipo ruta.
Depreciado desde la versión 3.9: Abrir GzipFile
para escribir sin especificar el argumento mod está desaprobado.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Comprime los datos, devolviendo un objeto bytes
que contiene los datos comprimidos. compresslevel y mtime tienen el mismo significado que en el constructor GzipFile
anterior.
Nuevo en la versión 3.2.
Cambiado en la versión 3.8: Se ha añadido el parámetro mtime para una salida reproducible.
gzip.
decompress
(datos)¶
Descomprime los datos, devolviendo un objeto bytes
que contiene los datos sin comprimir.
Nuevo en la versión 3.2.
Ejemplos de uso¶
Ejemplo de cómo leer un archivo comprimido:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Ejemplo de cómo crear un archivo GZIP comprimido:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Ejemplo de cómo comprimir GZIP un archivo existente:
import gzipimport shutilwith open('/home/joe/file.txt', 'rb') as f_in: with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)
Ejemplo de cómo comprimir con GZIP una cadena binaria:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Ver también
Módulo zlib
El módulo básico de compresión de datos necesario para soportar el formato de archivo gzip.
Interfaz de línea de comandos¶
El módulo gzip
proporciona una sencilla interfaz de línea de comandos para comprimir archivos ordecompress.
Una vez ejecutado, el módulo gzip
conserva el/los archivo/s de entrada.
Cambiado en la versión 3.8: Añadir una nueva interfaz de línea de comandos con un usage.By defecto, cuando se ejecutará la CLI, el nivel de compresión por defecto es 6.
Opciones de línea de comandos¶
file
¶
Si no se especifica el archivo, leer de sys.stdin
.
--fast
¶
Indica el método de compresión más rápido (menos compresión).
--best
¶
Indica el método de compresión más lento (mejor compresión).
-d
,
--decompress
¶
Descomprime el archivo dado.
-h
,
--help
¶
Muestra el mensaje de ayuda.
Deja una respuesta