Python ZipFile: Como Compactar e Descompactar Arquivos Com Python

Python ZipFile

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á?

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:

  1. Nome do arquivo sem a extensão.
  2. extensão do arquivo.
  3. Diretório onde será gravado o arquivo.
  4. 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 CERTIFICADO

Invista 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!!

Tags: | |

Sobre o Autor

Programador Viking
Programador Viking

DICA EXTRA: Algumas pessoas estão me perguntando qual é o curso que recomendo para quem deseja aprender programação, mesmo sem ter qualquer conhecimento sobre o assunto. Minha recomendação, tanto para quem está iniciando, como para quem já possui mais experiência, é essa AQUI...

3 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.


      • 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’

plugins premium WordPress