Python ZipFile: Como Compactar e Descompactar Arquivos Com Python
Python ZipFile é uma biblioteca que podemos utilizar para compactar e descompactar arquivos com a linguagem Python.
Ou seja, em um processo de automação de tarefa é muito comum usar a biblioteca ZipFile.
Portanto, recomendo ler esse artigo até o fim para entender exatamente como funciona. Vamos lá?
Confira neste artigo:
Compactando Arquivos
Primeiramente, devemos saber que existem duas formas de compactar arquivos com Python usando as bibliotecas:
Ambas as bibliotecas são ótimas opções para compactar arquivos.
Usando ZipFile
Vamos começar utilizando a biblioteca Python ZipFile, para isso criei o código abaixo para exemplificar.
import zipfile
z = zipfile.ZipFile('final.zip', 'w', zipfile.ZIP_DEFLATED)
z.write('file1.txt')
z.write('file2.txt')
z.close()
O terceiro argumento do construtor ZipFile é referente ao algoritmo de compressão.
Ou seja, são suportados os métodos abaixo:
ZIP_STORED = 0
ZIP_DEFLATED = 8
ZIP_BZIP2 = 12
ZIP_LZMA = 14
Logo depois chamamos o write() para inserir o arquivo que será compactado.
E assim que finalizar precisamos chamar o close(). Depois disso o arquivo .zip será criado.
Usando Shutil
A segunda forma de compactar arquivo usando Python é utilizando a biblioteca Shutil.
Vou deixar aqui um exemplo de utilização para compactar um único arquivo.
import shutil
shutil.make_archive('final', 'zip', './', 'file.txt')
Portanto, para criar um arquivo .zip a partir de um diretório, utilize o exemplo abaixo.
import shutil
shutil.make_archive('final', 'zip', './', 'data')
Lista de parâmetros:
- Nome do arquivo sem a extensão.
- extensão do arquivo.
- Diretório onde será gravado o arquivo.
- Arquivo ou diretório que será compactado.
Leia também: Os 7 Melhores Livros Para Aprender Python Sozinho
Descompactando Arquivos
Depois de aprender a compactar arquivos, agora vamos aprender a descompactar arquivos com Python.
Porém, existem formas diferentes de se descompactar um arquivo, para isso vou separar por tópicos.
Extrair Tudo
Para extrair todo o conteúdo de um arquivo compactado utilizamos a função extractall() conforme exemplo abaixo:
from zipfile import ZipFile
z = ZipFile('FILE.zip', 'r')
z.extractall()
z.close()
Ou seja, esse script é bem simples de entender, ele basicamente extrai todos o conteúdo que está dentro do arquivo FILE.zip no diretório atual.
Porém, quando queremos especificar o diretório de saída, devemos informar o diretório na função. Exemplo:
z.extract('output')
Ou seja, ele irá extrair todo o conteúdo no diretório de saída informado.
Extrair Um Único Arquivo
Se você quiser fazer a extração seletiva, pode usar a função extract() para extrair um único arquivo.
z.extract('data/US.txt')
Neste exemplo ele irá extrair o arquivo us.txt no diretório data dentro do pacote zip para o diretório atual.
Além disso, você pode especificar o diretório de saída, use path= para definir o diretório de saída.
Extrair Arquivo Com Senha
Para extrair um arquivo .zip que contem senha de descompactação, podemos utilizar o parâmetro pwd= na chamada das funções:
- extract()
- extractall()
z.extractall(pwd='SECRET2020')
Além disso, também é possível usar o método setpassword()
z.setpassword('SECRET2019')
Extrair Arquivos .tar
Arquivos .tar também é um formato de compactação muito comum.
Porém, você precisará usar o pacote tarfile, que é muito semelhante ao pacote zipfile.
Exemplo de utilização:
import tarfile
t = tarfile.open("FILE.tar.gz")
t.extractall()
Extrair Arquivos .rar
Assim como os arquivos .tar, temos também arquivos .rar que são bastante populares.
Para isso você precisará utilizar o pacote rarfile.
Porém, o pacote não é fornecido pela distribuição oficial do Python, o autor tentou fazer com que as interfaces fossem as mesmas do arquivo zip possível.
Exemplo de utilização:
import rarfile
r = rarfile.RarFile('FILE.rar')
r.extractall()
r.close()
Além disso também podemos extrair arquivos com senha utilizando o parâmetro pwd=
r.extract('FILE', pwd='SECRET2019')
r.extractall(pwd='SECRET2019')
Porém nem tudo são flores, para utilizar esse pacote do rarflie, será necessário instalar o executável unrar e configurar o módulo rarfile.
rarfile.UNRAR_TOOL = "unrar"
Extrair Vários Formatos de Compressão
Por fim, temos um pacote chamado pyunpack que pode extrair diversos formatos como 7-Zip, ACE, BZip2 etc.
Esse pacote pode ajudar bastante, porém pode ser necessário instalar mais utilizários para usar o pyunpack.
Recomendo dar uma conferida na documentação e seguir o guia de instalação desse pacote.
Exemplo de uso:
from pyunpack import Archive
Archive('FILE.zip').extractall('OUTPUT_DIR')
Ou seja, o arquivo de entrada pode ser qualquer formato compatível com zipfile e patool.
Conclusão: Python ZipFile
Em conclusão, neste artigo vimos diversas formas de compactar e descompactar arquivos usando o Python ZipFile.
Clique no botão abaixo para acessar mais de 1400 cursos completos e com certificado válido.
ACESSAR CURSOS COM CERTIFICADOInvista em você e conquiste uma excelente carreira profissional na área da tecnologia.
Enfim, espero que você tenha gostado do conteúdo.
Muito obrigado pela audiência e lhe desejo muito sucesso!!
Sobre o Autor
3 Comentários
Ótimo conteúdo!!!
Opa, obrigado pelo feedback meu amigo!
Eu tenho uma pasta “MAIN” zipada. Dentro desta pasta tenho diversas outras pastas. Como eu faço para descompactar a pasta e acessar todas as pastas dentro da pasta “MAIN”.
Obs: O arquivo zip, estou baixando de uma página web.
Já tentei fazer desta forma:
import zipfile
exemploZIP = zipfile.ZipFile (“arquivo.zip”)
exemploZIP.extractall()
exemploZIP.close()
Aparece a seguinte mensagem de erro:
[Errno 22] Invalid argument: ‘caminho do arquivo.zip’