gzip
— Suporte para arquivos gzip¶
Código-fonte: Lib/gzip.py
Esse módulo disponibiliza uma interface simples para comprimir e extrair arquivos como os programas GNU gzip e gunzip fazem.
A compressão de dados é realizada pelo módulo zlib
.
O módulo gzip
fornece a classe GzipFile
, bem como as funções de conveniência open()
, compress()
e decompress()
. A classe GzipFile
lê e grava arquivos no formato gzip, compactando ou descompactando automaticamente os dados para que se pareçam com um objeto arquivo comum.
Observe que formatos de arquivo adicionais que podem ser descompactados pelos programas gzip e gunzip, como aqueles produzidos por compress e pack, não são suportados por este módulo.
Este módulo define os seguintes itens:
- gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)¶
Abre um arquivo comprimido com gzip em modo binário ou texto, retornando file object.
O argumento filename pode ser um nome de arquivo real (um objeto
str
oubytes
), ou um objeto arquivo existente para ler ou gravar.O argumento mode pode ser qualquer um de
'r'
,'rb'
,'a'
,'ab'
,'w'
,'wb'
,'x'
ou'xb'
para modo binário, ou'rt'
,'at'
,'wt'
ou'xt'
para modo texto. O padrão é'rb'
.O argumento compresslevel é um inteiro de 0 a 9, como para o construtor de
GzipFile
.Para o modo binário, esta função equivale ao construtor de
GzipFile
:GzipFile(filename, mode, compresslevel)
. Neste caso, os argumentos encoding, errors e newline não devem ser fornecidos.Para o modo texto, um objeto
GzipFile
é criado e encapsulado em uma instânciaio.TextIOWrapper
com a codificação especificada, comportamento de tratamento de erros e final(is) de linha.Alterado na versão 3.3: Adicionado suporte para filename ser um objeto arquivo, suporte para modo texto e os argumentos encoding, errors e newline.
Alterado na versão 3.4: Adicionado suporte para os modos
'x'
,'xb'
e'xt'
.Alterado na versão 3.6: Aceita um objeto caminho ou similar.
- exception gzip.BadGzipFile¶
Uma exceção levantada para arquivos gzip inválidos. Herda de
OSError
.EOFError
ezlib.error
também podem ser levantadas para arquivos gzip inválidos.Adicionado na versão 3.8.
- class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Construtor para a classe
GzipFile
, que simula a maioria dos métodos de um objeto arquivo, com exceção do métodotruncate()
. Pelo menos um dos métodos fileobj e filename deve receber um valor não trivial.A nova instância de classe é baseada em fileobj, que pode ser um arquivo comum, um objeto
io.BytesIO
ou qualquer outro objeto que simule um arquivo. O padrão éNone
, caso em que filename é aberto para fornecer um objeto arquivo.Quando fileobj não é
None
, o argumento filename é usado apenas para ser incluído no cabeçalho do arquivo gzip, que pode incluir o nome original do arquivo descompactado. O padrão é o nome de arquivo fileobj, se discernível; caso contrário, o padrão é a string vazia e, neste caso, o nome original do arquivo não é incluído no cabeçalho.O argumento mode pode ser qualquer um dos seguintes:
'r'
,'rb'
,'a'
,'ab'
,'w'
,'wb'
,'x'
ou'xb'
, dependendo se o arquivo será lido ou escrito. O padrão é o modo de fileobj, se discernível; caso contrário, o padrão é'rb'
. Em versões futuras do Python, o modo de fileobj não será usado. É melhor sempre especificar mode para escrita.Observe que o arquivo é sempre aberto em modo binário. Para abrir um arquivo compactado em modo texto, use
open()
(ou envolva seuGzipFile
com umio.TextIOWrapper
).O argumento compresslevel é um inteiro de
0
a9
que controla o nível de compressão;1
é o mais rápido e produz a menor compressão, e9
é o mais lento e produz a maior compressão.0
significa sem compressão. O padrão é9
.O argumento opcional mtime é o registro de data e hora solicitado pelo gzip. O horário está no formato Unix, ou seja, segundos desde 00:00:00 UTC, 1º de janeiro de 1970. Se mtime for omitido ou definido como
None
, o horário atual será usado. Use mtime = 0 para gerar um fluxo compactado que não depende do horário de criação.Veja abaixo o atributo
mtime
que é definido durante a descompactação.Chamar o método
close()
de um objetoGzipFile
não fecha fileobj, pois você pode querer adicionar mais material após os dados compactados. Isso também permite que você passe um objetoio.BytesIO
aberto para escrita como fileobj e recupere o buffer de memória resultante usando o métodogetvalue()
do objetoio.BytesIO
.GzipFile
suporta a interfaceio.BufferedIOBase
, incluindo iteração e a instruçãowith
. Apenas o métodotruncate()
não é implementado.GzipFile
também disponibiliza os seguintes métodos e atributos:- peek(n)¶
Lê n bytes não compactados sem avançar a posição do arquivo. O número de bytes retornados pode ser maior ou menor que o solicitado.
Nota
Embora chamar
peek()
não altere a posição do arquivoGzipFile
, ele pode alterar a posição do objeto de arquivo subjacente (por exemplo, se oGzipFile
foi construído com o parâmetro fileobj).Adicionado na versão 3.2.
- mode¶
'rb'
para leitura e'wb'
para escrita.Alterado na versão 3.13: Em versões anteriores era um inteiro
1
ou2
.
- mtime¶
Ao descompactar, este atributo é definido como o último registro de data e hora no cabeçalho lido mais recentemente. É um inteiro que contém o número de segundos desde a era Unix (00:00:00 UTC, 1º de janeiro de 1970). O valor inicial antes da leitura de qualquer cabeçalho é
None
.
- name¶
O caminho para o arquivo gzip no disco, como
str
oubytes
. Equivalente à saída deos.fspath()
no caminho de entrada original, sem nenhuma outra normalização, resolução ou expansão.
Alterado na versão 3.1: Foi adicionado suporte para a instrução
with
, juntamente com o argumento do construtor mtime e o atributomtime
.Alterado na versão 3.2: Foi adicionado suporte para arquivos preenchidos com zeros e não pesquisáveis.
Alterado na versão 3.3: O método
io.BufferedIOBase.read1()
agora está implementado.Alterado na versão 3.4: Adicionado suporte para os modos
'x'
e'xb'
.Alterado na versão 3.5: Adicionado suporte para escrever objetos bytes ou similares arbitrários. O método
read()
agora aceita o argumentoNone
.Alterado na versão 3.6: Aceita um objeto caminho ou similar.
Descontinuado desde a versão 3.9: Abrir
GzipFile
para escrita sem especificar o argumento mode está descontinuado.Alterado na versão 3.12: Remove o atributo
filename
e usa o atributoname
.
- gzip.compress(data, compresslevel=9, *, mtime=None)¶
Compacta data, retornando um objeto
bytes
contendo os dados compactados. compresslevel e mtime têm o mesmo significado que no construtor deGzipFile
acima.Adicionado na versão 3.2.
Alterado na versão 3.8: Adicionado o parâmetro mtime para saída reproduzível.
Alterado na versão 3.11: A velocidade é melhorada pela compactação de todos os dados de uma só vez, em vez de em fluxo contínuo. Chamadas com mtime definido como
0
são delegadas azlib.compress()
para maior velocidade. Nessa situação, a saída pode conter um valor de byte “OS” no cabeçalho gzip diferente de 255 “unknown”, conforme fornecido pela implementação subjacente do zlib.Alterado na versão 3.13: O byte do cabeçalho gzip do sistema operacional tem a garantia de ser definido como 255 quando esta função é usada, como era o caso na versão 3.10 e anteriores.
- gzip.decompress(data)¶
Descompacta data, retornando um objeto
bytes
contendo os dados descompactados. Esta função é capaz de descompactar dados de gzip de vários membros (vários blocos gzip concatenados). Quando é certo que os dados contêm apenas um membro, a funçãozlib.decompress()
com wbits definido como 31 é mais rápida.Adicionado na versão 3.2.
Alterado na versão 3.11: A velocidade é melhorada ao descompactar os membros de uma só vez na memória, em vez de fazê-lo de forma contínua.
Exemplos de uso¶
Exemplo de como ler um arquivo comprimido:
import gzip
with gzip.open('/home/joe/arquivo.txt.gz', 'rb') as f:
file_content = f.read()
Exemplo de como criar um arquivo comprimido com GZIP:
import gzip
content = b"Muito conteúdo aqui"
with gzip.open('/home/joe/arquivo.txt.gz', 'wb') as f:
f.write(content)
Exemplo de como comprimir um arquivo existente com GZIP:
import gzip
import shutil
with open('/home/joe/arquivo.txt', 'rb') as f_in:
with gzip.open('/home/joe/arquivo.txt.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
Exemplo de como comprimir uma string binária com compressão GZIP:
import gzip
s_in = b"Muito conteúdo aqui"
s_out = gzip.compress(s_in)
Ver também
- Módulo
zlib
O módulo básico de compactação de dados necessário para dar suporte ao formato de arquivo do gzip.
Interface de linha de comando¶
O módulo gzip
fornece uma interface de linha de comando simples para compactar ou descompactar arquivos.
Uma vez executado, o módulo gzip
mantém o(s) arquivo(s) de entrada.
Alterado na versão 3.8: Adiciona uma nova interface de linha de comando com um mensagem de uso. Por padrão, ao executar a CLI, o nível de compactação padrão é 6.
Opções da linha de comando¶
- --fast¶
Indica o método mais rápido de compressão (menor compressão)
- --best¶
Indica o método mais lento de compressão (melhor compressão).
- -d, --decompress¶
Descompacta o arquivo dado.
- -h, --help¶
Exibe a mensagem de ajuda.