"zlib" --- Compresión compatible con **gzip**
*********************************************

======================================================================

Para aplicaciones que requieren compresión de datos, las funciones en
este módulo permiten la compresión y descompresión mediante la
biblioteca zlib. La biblioteca zlib tiene su propia página de inicio
en https://www.zlib.net. Existen incompatibilidades conocidas entre el
módulo de Python y las versiones de la biblioteca zlib anteriores a la
1.1.3; 1.1.3 tiene una vulnerabilidad de seguridad, por lo que
recomendamos usar 1.1.4 o posterior.

Las funciones de zlib tienen muchas opciones y, a menudo, deben usarse
en un orden particular. Esta documentación no intenta cubrir todas las
permutaciones; consulte el manual de zlib en
http://www.zlib.net/manual.html para obtener información autorizada.

Para leer y escribir archivos ".gz" consultar el módulo "gzip".

La excepción y las funciones disponibles en este módulo son:

exception zlib.error

   Excepción provocada en errores de compresión y descompresión.

zlib.adler32(data[, value])

   Calcula una suma de comprobación Adler-32 de *data*. (Una suma de
   comprobación Adler-32 es casi tan confiable como un CRC32, pero se
   puede calcular mucho más rápidamente). El resultado es un entero de
   32 bits sin signo. Si *value* está presente, se utiliza como el
   valor inicial de la suma de comprobación; de lo contrario, se
   utiliza un valor predeterminado de 1. Pasar *value* permite
   calcular una suma de comprobación en ejecución durante la
   concatenación de varias entradas. El algoritmo no es
   criptográficamente fuerte y no se debe utilizar para la
   autenticación o las firmas digitales. Puesto que está diseñado como
   un algoritmo de suma de comprobación, no es adecuado su uso como un
   algoritmo *hash* general.

   Distinto en la versión 3.0: The result is always unsigned. To
   generate the same numeric value when using Python 2 or earlier, use
   "adler32(data) & 0xffffffff".

zlib.compress(data, /, level=- 1)

   Comprime los bytes de *data*, retornando un objeto bytes que
   contiene datos comprimidos. *level* es un entero de "0" a "9" o
   "-1" que controla el nivel de compresión; "1" (Z_BEST_SPEED) es más
   rápido y produce la menor compresión, "9" (Z_BEST_COMPRESSION) es
   más lento y produce mayor compresión. "0" (Z_NO_COMPRESSION) no es
   compresión. El valor predeterminado es "-1"
   (Z_DEFAULT_COMPRESSION). Z_DEFAULT_COMPRESSION representa un
   compromiso predeterminado entre velocidad y compresión (actualmente
   equivalente al nivel 6). Genera la excepción "error" si se produce
   algún error.

   Distinto en la versión 3.6: *level* ahora se puede utilizar como
   parámetro de palabra clave.

zlib.compressobj(level=-1, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY[, zdict])

   Retorna un objeto de compresión, para ser usado para comprimir
   flujos de datos que no caben en la memoria de una vez.

   *level* es el nivel de compresión -- es un entero de `` 0`` a ``
   9`` o `` -1``. Un valor de `` 1`` (Z_BEST_SPEED) es el más rápido y
   produce la menor compresión, mientras que un valor de `` 9``
   (Z_BEST_COMPRESSION) es el más lento y produce la mayor cantidad.
   "0" (Z_NO_COMPRESSION) no es compresión. El valor predeterminado es
   "-1" (Z_DEFAULT_COMPRESSION). Z_DEFAULT_COMPRESSION representa un
   compromiso predeterminado entre velocidad y compresión (actualmente
   equivalente al nivel 6).

   *method* es el algoritmo de compresión. Actualmente, el único valor
   admitido es "DEFLATED".

   El argumento *wbits* controla el tamaño del búfer histórico (o el
   "tamaño de ventana") utilizado al comprimir datos, y si se incluye
   un encabezado y un avance en la salida. Puede tomar varios rangos
   de valores, por defecto es "15" (MAX_WBITS):

   * +9 a +15: el logaritmo en base dos del tamaño de la ventana, que
     por lo tanto oscila entre 512 y 32768. Los valores más grandes
     producen una mejor compresión a expensas de un mayor uso de
     memoria. Como resultado se incluirá un encabezado y un avance
     específicos de zlib.

   * −9 a −15: utiliza el valor absoluto de *wbits* como el logaritmo
     del tamaño de la ventana, al tiempo que produce una secuencia de
     salida sin encabezado ni suma de verificación.

   * +25 a +31 = 16 + (9 a 15): utiliza los 4 bits bajos del valor
     como el logaritmo del tamaño de la ventana, mientras que incluye
     un encabezado básico **gzip** y suma de verificación en la
     salida.

   El argumento *memLevel* controla la cantidad de memoria utilizada
   para el estado de compresión interna. Los valores posibles varían
   de "1" a "9". Los valores más altos usan más memoria, pero son más
   rápidos y producen una salida más pequeña.

   *strategy* se usa para ajustar el algoritmo de compresión. Los
   valores posibles son "Z_DEFAULT_STRATEGY", "Z_FILtered",
   "Z_HUFFMAN_ONLY", "Z_RLE" (zlib 1.2.0.1) y "Z_FIXED" (zlib
   1.2.2.2).

   *zdict* es un diccionario de compresión predefinido. Este es una
   secuencia de bytes (como un objeto "bytes") que contiene
   subsecuencias que se espera que ocurran con frecuencia en los datos
   que se van a comprimir. Las subsecuencias que se espera que sean
   más comunes deben aparecer al final del diccionario.

   Distinto en la versión 3.3: Se agregó el parámetro *zdict* y el
   soporte de argumentos de palabras clave.

zlib.crc32(data[, value])

   Calcula un suma de comprobación CRC (comprobación de redundancia
   cíclica, por sus siglas en inglés *Cyclic Redundancy Check*) de
   *datos*. El resultado es un entero de 32 bits sin signo. Si *value*
   está presente, se usa como el valor inicial de la suma de
   verificación; de lo contrario, se usa el valor predeterminado 0.
   Pasar *value* permite calcular una suma de verificación en
   ejecución sobre la concatenación de varias entradas. El algoritmo
   no es criptográficamente fuerte y no debe usarse para autenticación
   o firmas digitales. Dado que está diseñado para usarse como un
   algoritmo de suma de verificación, no es adecuado su uso como
   algoritmo *hash* general.

   Distinto en la versión 3.0: The result is always unsigned. To
   generate the same numeric value when using Python 2 or earlier, use
   "crc32(data) & 0xffffffff".

zlib.decompress(data, /, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)

   Descomprime los bytes en *data*, retornando un objeto de bytes que
   contiene los datos sin comprimir. El parámetro *wbits* depende del
   formato de *data*, y se trata más adelante. Si se da *bufsize*, se
   usa como el tamaño inicial del búfer de salida. Provoca la
   excepción "error" si se produce algún error.

   El parámetro *wbits* controla el tamaño del búfer histórico (o el
   "tamaño de ventana") y qué formato de encabezado y cola se espera.
   Es similar al parámetro para "compressobj()", pero acepta más
   rangos de valores:

   * +8 a +15: el logaritmo en base dos del tamaño del búfer. La
     entrada debe incluir encabezado y cola zlib.

   * 0: determina automáticamente el tamaño del búfer desde el
     encabezado zlib. Solo se admite desde zlib 1.2.3.5.

   * -8 to -15: utiliza el valor absoluto de *wbits* como el logaritmo
     del tamaño del búfer. La entrada debe ser una transmisión sin
     formato, sin encabezado ni cola.

   * +24 a +31 = 16 + (8 a 15): utiliza los 4 bits de bajo orden del
     valor como el logaritmo del tamaño del búfer. La entrada debe
     incluir encabezado y cola gzip.

   * +40 a +47 = 32 + (8 a 15): utiliza los 4 bits de bajo orden del
     valor como el logaritmo del tamaño del búfer y acepta
     automáticamente el formato zlib o gzip.

   Al descomprimir una secuencia, el tamaño del búfer no debe ser
   menor al tamaño utilizado originalmente para comprimir la
   secuencia; el uso de un valor demasiado pequeño puede generar una
   excepción "error". El valor predeterminado *wbits* corresponde al
   tamaño más grande de búfer y requiere que se incluya encabezado y
   cola zlib.

   *bufsize* es el tamaño inicial del búfer utilizado para contener
   datos descomprimidos. Si se requiere más espacio, el tamaño del
   búfer aumentará según sea necesario, por lo que no hay que tomar
   este valor como exactamente correcto; al ajustarlo solo se
   guardarán algunas llamadas en "malloc()".

   Distinto en la versión 3.6: *wbits* y *bufsize* se pueden usar como
   argumentos de palabra clave.

zlib.decompressobj(wbits=MAX_WBITS[, zdict])

   Retorna un objeto de descompresión, que se utilizará para
   descomprimir flujos de datos que no caben en la memoria de una vez.

   El parámetro *wbits* controla el tamaño del búfer histórico (o el
   "tamaño de ventana") y qué formato de encabezado y cola se espera.
   Tiene el mismo significado que described for decompress().

   El parámetro *zdict* especifica un diccionario de compresión
   predefinido. Si se proporciona, este debe ser el mismo diccionario
   utilizado por el compresor que produjo los datos que se van a
   descomprimir.

   Nota:

     Si *zdict* es un objeto mutable (como "bytearray"), no se debe
     modificar su contenido entre la llamada "decompressobj()" y la
     primera llamada al método descompresor "decompress()".

   Distinto en la versión 3.3: Se agregó el parámetro *zdict*.

Los objetos de compresión admiten los siguientes métodos:

Compress.compress(data)

   Comprime *data*, y retorna al menos algunos de los datos
   comprimidos como un objeto de bytes. Estos datos deben concatenarse
   a la salida producida por cualquier llamada anterior al método
   "compress()". Algunas entradas pueden mantenerse en un búfer
   interno para su posterior procesamiento.

Compress.flush([mode])

   Se procesan todas las entradas pendientes y se retorna un objeto de
   bytes que contiene la salida comprimida restante. El argumento
   *mode* acepta una de las siguientes constantes "Z_NO_FLUSH",
   "Z_PARTIAL_FLUSH", "Z_SYNC_FLUSH", "Z_FULL_FLUSH", "Z_BLOCK" (zlib
   1.2.3.4), o "Z_FINISH", por defecto "Z_FINISH". Excepto "Z_FINISH",
   todas las constantes permiten comprimir más cadenas de bytes,
   mientras que "Z_FINISH" finaliza el flujo comprimido y evita la
   compresión de más datos. Después de llamar a "flush()" con *mode*
   establecido en "Z_FINISH", el método "compress()" no se puede
   volver a llamar. La única acción posible es eliminar el objeto.

Compress.copy()

   Retorna una copia del objeto compresor. Esto se puede utilizar para
   comprimir eficientemente un conjunto de datos que comparten un
   prefijo inicial común.

Distinto en la versión 3.8: Añadido "copy.copy()" y "copy.deepcopy()"
para el soporte de objetos de compresión.

Los objetos de descompresión admiten los siguientes métodos y
atributos:

Decompress.unused_data

   Un objeto de bytes que contiene todos los bytes restantes después
   de los datos comprimidos. Es decir, esto permanece "b """ hasta que
   esté disponible el último byte que contiene datos de compresión. Si
   la cadena de bytes completa resultó contener datos comprimidos, es
   "b""", un objeto de bytes vacío.

Decompress.unconsumed_tail

   Un objeto de bytes que contiene datos no procesados por la última
   llamada al método "descompress()" , debido a un desbordamiento del
   límite del búfer de datos descomprimidos. Estos datos aún no han
   sido procesados por la biblioteca zlib, por lo que debe enviarlos
   (potencialmente concatenando los datos nuevamente) mediante una
   llamada al método "descompress()" para obtener la salida correcta.

Decompress.eof

   Un valor booleano que indica si se ha alcanzado el final del flujo
   de datos comprimido.

   This makes it possible to distinguish between a properly formed
   compressed stream, and an incomplete or truncated one.

   Nuevo en la versión 3.3.

Decompress.decompress(data, max_length=0)

   Descomprime *data*, retornando un objeto de bytes que contiene al
   menos parte de los datos descomprimidos en *string*. Estos datos
   deben concatenarse con la salida producida por cualquier llamada
   anterior al método "decompress()". Algunos de los datos de entrada
   pueden conservarse en búfer internos para su posterior
   procesamiento.

   Si el parámetro opcional *max_length* no es cero, el valor de
   retorno no será más largo que *max_length*. Esto puede significar
   que no toda la entrada comprimida puede procesarse; y los datos no
   consumidos se almacenarán en el atributo "unconsumed_tail". Esta
   cadena de bytes debe pasarse a una llamada posterior a
   "decompress()" si la descompresión ha de continuar. Si *max_length*
   es cero, toda la entrada se descomprime y "unconsumed_tail" queda
   vacío.

   Distinto en la versión 3.6: *max_length* puede ser utilizado como
   argumento de palabras clave.

Decompress.flush([length])

   Se procesan todas las entradas pendientes y se retorna un objeto de
   bytes que contiene el resto de los datos que se descomprimirán.
   Después de llamar a "flush()", no se puede volver a llamar al
   método "decompress()". La única acción posible es eliminar el
   objeto.

   El parámetro opcional *length* establece el tamaño inicial del
   búfer de salida.

Decompress.copy()

   Retorna una copia del objeto de descompresión. Puede usarlo para
   guardar el estado de la descompresión actual, de modo que pueda
   regresar rápidamente a esta ubicación más tarde.

Distinto en la versión 3.8: Añadido "copy.copy()" y "copy.deepcopy()"
para el soporte de objetos de compresión.

La información sobre la versión de la biblioteca zlib en uso está
disponible a través de las siguientes constantes:

zlib.ZLIB_VERSION

   Versión de la biblioteca zlib utilizada al compilar el módulo.
   Puede ser diferente de la biblioteca zlib utilizada actualmente por
   el sistema, que puede ver en "ZLIB_RUNTIME_VERSION".

zlib.ZLIB_RUNTIME_VERSION

   Cadena que contiene la versión de la biblioteca zlib utilizada
   actualmente por el intérprete.

   Nuevo en la versión 3.3.

Ver también:

  Módulo "gzip"
     Lectura y escritura de los archivos en formato **gzip**.

  http://www.zlib.net
     Página oficial de la biblioteca zlib.

  http://www.zlib.net/manual.html
     El manual de zlib explica la semántica y el uso de las numerosas
     funciones de la biblioteca.
