Pesquisa de site

Como compactar e descompactar arquivos usando Python


Se você estiver criando um aplicativo que lida com arquivos, considere usar zip para economizar espaço.

Compactar é uma maneira elegante de compactar vários arquivos e combiná-los em um único. Isso economiza não apenas espaço de armazenamento, mas também largura de banda ao transferir um arquivo pela rede. Uma das melhores características do zip é que ele funciona em todas as principais plataformas: Windows, Linux e Mac.

Zip usa compactação sem perdas para reter todos os dados ao compactá-los e descompactá-los. Você também pode criptografar e descriptografar seus arquivos zip.

Com tantos recursos para explorar, descubra como você pode ler, compactar e descompactar arquivos usando o módulo zipfile do Python.

O que é o módulo zipfile?

Você pode usar o módulo zipfile padrão para manipular arquivos zip usando Python. Com este módulo, você pode abrir e ler arquivos zip, ler seus metadados, criar um arquivo zip, compactá-lo e descompactar arquivos. Existem três métodos de compactação disponíveis: Deflate, Bzip2 e LZMA.

Uma das coisas que falta ao módulo é a capacidade de lidar com arquivos de vários discos, mas ele suporta a extensão ZIP64. Ele também pode descriptografar arquivos zip, mas não criptografá-los. Usando o módulo zipfile você pode obter metadados do arquivo zip, como a data e hora da modificação. Você também pode obter detalhes como o sistema operacional usado para criar o arquivo, a versão do zip e o tamanho do arquivo no formato compactado e descompactado.

Como compactar arquivos usando Python

Você pode compactar vários arquivos em um arquivo usando o módulo zipfile do Python. Importe o módulo ZipFile do pacote zipfile para executar as operações zip necessárias. Importe também o módulo os para selecionar e salvar arquivos.

Defina uma função get_all_file_paths(). Ele deve aceitar um parâmetro de diretório que contenha o caminho para a pasta que contém os arquivos a serem compactados.

Inicialize uma lista vazia que armazenará a lista de caminhos de arquivos. Use um loop for para obter o conteúdo completo do diretório de destino usando a função os.walk(). Esta função busca os nomes dos arquivos em uma árvore de diretórios movendo-se ao longo dela em uma abordagem de cima para baixo ou de baixo para cima. Para cada diretório, a função retorna uma tupla de três contendo root, dirs e arquivos.

A raiz é uma string que contém o caminho completo para o diretório. A lista dirs inclui todos os subdiretórios contidos no diretório. A lista de arquivos contém todos os arquivos presentes no diretório.

Dentro do loop, declare outro loop para iterar na lista de arquivos. Use a função os.path.join() para combinar o nome do diretório com cada nome de arquivo para criar um caminho completo. Em seguida, anexe este nome de arquivo completo à lista que você criou anteriormente. Assim que esta operação terminar, retorne a lista de caminhos de arquivo.

# import the required modules
from zipfile import ZipFile
import os
# create a function to get all the file paths
def get_all_file_paths(directory):
    # initializing empty list to store file paths
    file_paths = []
    # navigate through the files
    for root, directories, files in os.walk(directory):
        for filename in files:
            # join the root and filename to create a complete file path
            filepath = os.path.join(root, filename)
            file_paths.append(filepath)
    # returning all file paths
    return file_paths

Armazene o caminho para a pasta que contém os arquivos que você deseja compactar em uma variável chamada diretório. Chame a função get_all_file_paths() que você criou anteriormente e armazene o valor que ela retorna em file_paths.

Exiba uma mensagem ao usuário para que ele saiba que esses são os arquivos que o programa irá compactar. Itere sobre os arquivos e exiba seus nomes.

Passe o nome que você deseja que seu arquivo zip tenha junto com a especificação de que o programa retorna um arquivo gravável usando a instrução with para lidar com exceções. Itere cada arquivo e use a função write() no arquivo gravável em um arquivo zip.

Quando a operação for concluída, envie uma mensagem explicando que o programa compactado todos os arquivos com sucesso.

# path to folder you want to zip
directory = './pythonzip'
# calling function to get all file paths in the directory
file_paths = get_all_file_paths(directory)
# printing the list of all files you want to zip
print('List of files that will be zipped:')
for file_name in file_paths:
    print(file_name)
# writing files to a zipfile
with ZipFile('my_file.zip', 'w') as zip:
    # write each file one by one
    for file in file_paths:
        zip.write(file)
print('All files are zipped!')

Como descompactar arquivos usando Python

A implementação da descompactação de arquivos usando o módulo zipfile é muito mais fácil. Importe o pacotezipfiledo módulo ZipFile e armazene o nome do arquivo zip que deseja extrair em uma variável. Use a instrução with para lidar com exceções e abrir o arquivo que deseja extrair no modo de leitura. Use a função printdir() para exibir o índice dos arquivos presentes no zip.

Exiba uma mensagem de progresso informando que você está extraindo os arquivos e use a função extractall() para extrair o conteúdo do arquivo zip para o diretório de trabalho atual. Alternativamente, você pode incluir um parâmetro path para alterar o caminho onde o programa extrai os arquivos.

Exiba uma mensagem usando a instrução print na conclusão da operação.

# importing the required modules
from zipfile import ZipFile
# pass the name of the zip file you want to extract
file_name = "extract.zip"
# opening the zip file in read mode
with ZipFile(file_name, 'r') as zip:
    # display the contents of the zip file
    zip.printdir()
    # extracting all the files
    print('Extract in progress...')
    zip.extractall()
    print('All files are extracted!')

Mais sobre arquivos Zip

Os arquivos Zip ganharam muita popularidade e estão em uso há décadas. Sites populares como GitHub e Google Drive permitem baixar uma coleção de arquivos como um arquivo zip. O programa zip compacta um conjunto de arquivos em um único pacote. Isso contrasta com uma ferramenta como o tar, que empacota os arquivos, mas não os compacta.

Se você deseja criptografar seus arquivos usando um algoritmo mais eficiente, os arquivos RAR são a melhor opção. RAR usa o algoritmo AES-128 que é melhor que o algoritmo deflate usado por arquivos zip. Por fim, escolha aquele que melhor atende à sua necessidade.

Artigos relacionados: