gzip — compressão e descompressão gzip

Este módulo permite a compressão e descompressão de dados binários com o algoritmo DEFLATE utilizado pelo formato de ficheiro gzip. Fornece auxiliares pontuais compress()/decompress() e um invólucro em fluxo GzipFile em torno de um ficheiro ou objeto de fluxo subjacente.

Nota

Prefira utilizar deflate.DeflateIO em vez das funções deste módulo, pois fornece uma interface de fluxo para compressão e descompressão que é conveniente e mais eficiente em memória ao trabalhar com leitura ou escrita de dados comprimidos num ficheiro, socket ou fluxo.

Disponibilidade:

  • Este módulo não está incluído na OpenMV Cam por omissão, pois duplica funcionalidade já fornecida pelo módulo deflate.

  • Uma cópia pode ser instalada (ou congelada em firmware personalizado) a partir de micropython-lib (fonte). Consulte Gestão de pacotes para mais informação. Esta documentação descreve esse módulo.

  • A compressão só está disponível se a compressão estiver disponível no módulo deflate incorporado – ou seja, não nas OpenMV Cams baseadas em STM32 (consulte a nota de disponibilidade acima).

Funções

gzip.open(filename: str, mode: str, /) GzipFile

Invólucro em torno de open() incorporado que devolve uma instância de GzipFile.

gzip.decompress(data: bytes, /) bytes

Descomprime data num objeto bytes.

gzip.compress(data: bytes, /) bytes

Comprime data num objeto bytes.

Classes

class gzip.GzipFile(*, fileobj, mode: str)

Esta classe pode ser utilizada para envolver um fileobj que é qualquer objeto semelhante a fluxo, como um ficheiro, socket ou fluxo (incluindo io.BytesIO). É em si própria um fluxo e implementa os métodos padrão read/readinto/write/close.

Quando o argumento mode é "rb", as leituras da instância de GzipFile descomprimem os dados no fluxo subjacente e devolvem dados descomprimidos.

Se o suporte à compressão estiver ativado, o argumento mode pode ser definido como "wb", e as escritas na instância de GzipFile serão comprimidas e escritas no fluxo subjacente.

Por omissão, a classe GzipFile lê e escreve dados usando o formato de ficheiro gzip, incluindo um cabeçalho e rodapé com soma de verificação e um tamanho de janela de 512 bytes.

Os argumentos file, compresslevel e mtime não são suportados. fileobj e mode devem ser sempre especificados como argumentos de palavra-chave.

Exemplos

Um caso de utilização típico de gzip.GzipFile é ler ou escrever um ficheiro comprimido a partir do armazenamento:

import gzip

# Reading:
with open("data.gz", "rb") as f:
    with gzip.GzipFile(fileobj=f, mode="rb") as g:
        # Use g.read(), g.readinto(), etc.

 # Same, but using gzip.open:
with gzip.open("data.gz", "rb") as f:
     # Use f.read(), f.readinto(), etc.

# Writing:
with open("data.gz", "wb") as f:
    with gzip.GzipFile(fileobj=f, mode="wb") as g:
        # Use g.write(...) etc

# Same, but using gzip.open:
with gzip.open("data.gz", "wb") as f:
    # Use f.write(...) etc

# Write a dictionary as JSON in gzip format, with a
# small (64 byte) window size.
config = { ... }
with gzip.open("config.gz", "wb") as f:
    json.dump(config, f)

Para orientação sobre como trabalhar com fontes gzip e escolher o tamanho da janela, consulte a nota no final da documentação deflate.