Código fuente:Lib / gzip.py

Este módulo proporciona una interfaz simple para comprimir y descomprimir archivos al igual que los programas GNU. gzip y gunzip haría.

La compresión de datos la proporciona el zlib módulo.

los gzip módulo proporciona el GzipFile clase, así como la open(), compress() y decompress() funciones de conveniencia. los GzipFile la clase lee y escribe gzip-formatear archivos, comprimiendo o descomprimiendo automáticamente los datos para que se vea como un ordinario objeto de archivo.

Tenga en cuenta que los formatos de archivo adicionales que se pueden descomprimir gzip y gunzip programas, como los producidos por comprimir y paquete, 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)

Abra un archivo comprimido con gzip en modo binario o texto, devolviendo un objeto de archivo.

los nombre del archivo El argumento puede ser un nombre de archivo real (un str o bytes objeto), o un objeto de archivo existente para leer o escribir.

los modo El argumento puede ser cualquiera de 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x' o 'xb' para modo binario, o 'rt', 'at', 'wt', o 'xt' para el modo de texto. El valor predeterminado es 'rb'.

los nivel de compresión argumento es un número entero de 0 a 9, como para el GzipFile constructor.

Para el modo binario, esta función es equivalente a la GzipFile constructor: GzipFile(filename, mode, compresslevel). En este caso, el codificacion, errores y nueva línea no se deben proporcionar argumentos.

Para el modo de texto, un GzipFile El objeto se crea y se envuelve en un io.TextIOWrapper instancia con la codificación especificada, el comportamiento de manejo de errores y las terminaciones de línea.

Modificado en la versión 3.3: Soporte agregado para nombre del archivo siendo un objeto de archivo, soporte para el modo de texto y el codificacion, errores y nueva línea argumentos.

Modificado en la versión 3.4: Soporte agregado para el 'x', 'xb' y 'xt' modos.

Modificado en la versión 3.6: Acepta un objeto parecido a una ruta.

exception gzip.BadGzipFile

Se generó una excepción para archivos gzip no válidos. Hereda OSError. EOFError y zlib.error también se puede generar para archivos gzip no válidos.

Nuevo en la versión 3.8.

class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)

Constructor para el GzipFile clase, que simula la mayoría de los métodos de una objeto de archivo, con la excepción del truncate() método. Al menos uno de fileobj y nombre del archivo debe recibir un valor no trivial.

La nueva instancia de clase se basa en fileobj, que puede ser un archivo normal, un io.BytesIO objeto, o cualquier otro objeto que simule un archivo. Por defecto es None, en ese caso nombre del archivo se abre para proporcionar un objeto de archivo.

Cuando fileobj no es None, los nombre del archivo El argumento solo se usa para ser incluido en el gzip encabezado del archivo, que puede incluir el nombre de archivo original del archivo sin comprimir. Por defecto es el nombre de archivo de fileobj, si es perceptible; de lo contrario, el valor predeterminado es el vacío stringy, en este caso, el nombre del archivo original no se incluye en el encabezado.

los modo El argumento puede ser cualquiera de 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', o 'xb', dependiendo de si el archivo se leerá o se escribirá. El predeterminado es el modo de fileobj si es perceptible; de lo contrario, el valor predeterminado es 'rb'. En el futuro, Python lanza el modo de fileobj no se utilizará. Es mejor especificar siempre 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 envuelve tu GzipFile con un io.TextIOWrapper).

los nivel de compresión el argumento es un número entero de 0 para 9 controlar el nivel de compresión; 1 es más rápido y produce la menor compresión, y 9 es más lento y produce la mayor compresión. 0 no hay compresión. El valor predeterminado es 9.

los mtime El argumento es una marca de tiempo numérica opcional que se escribirá en el campo de hora de la última modificación en la secuencia al comprimir. Solo debe proporcionarse en modo de compresión. Si se omite o None, se utiliza la hora actual. Ver el mtime attribute para más detalles.

Llamando a un GzipFile objetos close() el método no cierra fileobj, ya que es posible que desee agregar más material después de los datos comprimidos. Esto también le permite pasar un io.BytesIO objeto abierto para escribir como fileobjy recupere el búfer de memoria resultante utilizando el io.BytesIO objetos getvalue() método.

GzipFile apoya el io.BufferedIOBase interfaz, incluida la iteración y la with declaración. Solo el truncate() el método no está implementado.

GzipFile también proporciona el siguiente método y attribute:

peek(n)

Leer norte bytes sin comprimir sin avanzar la posición del archivo. A lo sumo, se realiza una sola lectura en el flujo comprimido para satisfacer la llamada. El número de bytes devueltos puede ser mayor o menor que el solicitado.

Nota

Mientras llama peek() no cambia la posición del archivo del GzipFile, puede cambiar la posición del objeto de archivo subyacente (por ejemplo, si el GzipFile fue construido con el fileobj parámetro).

Nuevo en la versión 3.2.

mtime

Al descomprimir, el valor del campo de hora de la última modificación en el encabezado leído más recientemente se puede leer de este attribute, como un número entero. El valor inicial antes de leer cualquier encabezado es None.

Todos gzip Se requiere que los flujos comprimidos contengan este campo de marca de tiempo. Algunos programas, como gunzip, haga uso de la marca de tiempo. El formato es el mismo que el valor de retorno de time.time() y el st_mtime attribute del objeto devuelto por os.stat().

Modificado en la versión 3.1: Soporte para el with se agregó la declaración, junto con el mtime argumento del constructor y mtime attribute.

Modificado en la versión 3.2: Se agregó soporte para archivos con relleno de ceros y que no se pueden buscar.

Modificado en la versión 3.3: los io.BufferedIOBase.read1() El método ahora está implementado.

Modificado en la versión 3.4: Soporte agregado para el 'x' y 'xb' modos.

Modificado en la versión 3.5: Soporte agregado para escribir arbitrario objetos similares a bytes. los read() El método ahora acepta un argumento de None.

Modificado en la versión 3.6: Acepta un objeto parecido a una ruta.

En desuso desde la versión 3.9: Apertura GzipFile para escribir sin especificar el modo El argumento está en desuso.

gzip.compress(data, compresslevel=9, *, mtime=None)

Comprimir el datos, devolviendo un bytes objeto que contiene los datos comprimidos. nivel de compresión y mtime tienen el mismo significado que en el GzipFile constructor de arriba.

Nuevo en la versión 3.2.

Modificado en la versión 3.8: Agregó el mtime parámetro para una salida reproducible.

gzip.decompress(data)

Descomprime el datos, devolviendo un bytes objeto 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 gzip
with gzip.open('/home/joe/file.txt.gz','rb')as f:
    file_content = f.read()

Ejemplo de cómo crear un archivo GZIP comprimido:

import gzip
content =b"Lots of content here"with gzip.open('/home/joe/file.txt.gz','wb')as f:
    f.write(content)

Ejemplo de cómo comprimir con GZIP un archivo existente:

import gzip
import shutil
withopen('/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 GZIP un binario string:

import gzip
s_in =b"Lots of content here"
s_out = gzip.compress(s_in)

Ver también

Modulezlib

El módulo de compresión de datos básico necesario para admitir gzip formato de archivo.

Interfaz de línea de comandos

los gzip El módulo proporciona una interfaz de línea de comandos simple para comprimir o descomprimir archivos.

Una vez ejecutado el gzip El módulo mantiene los archivos de entrada.

Modificado en la versión 3.8: Agregue una nueva interfaz de línea de comandos con un uso. De forma predeterminada, cuando ejecutará la CLI, el nivel de compresión predeterminado es 6.

Opciones de línea de comando

file

Si expediente no se especifica, se lee 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

Muestre el mensaje de ayuda.