Python: Como Compactar e Extrair Arquivos .zip e .tar.gz sem Instalar Bibliotecas

Python: Como Compactar e Extrair Arquivos .zip e .tar.gz sem Instalar Bibliotecas

A compressão e extração de arquivos são operações essenciais para rotinas de backup, empacotamento de relatórios e transferência de dados. A linguagem Python traz nativamente em sua biblioteca padrão os módulos zipfile e tarfile, permitindo manipular arquivos .zip, .tar e .tar.gz sem a necessidade de instalar pacotes terceiros via pip.

1. Manipulação de Arquivos .zip (Módulo zipfile)

Ideal para compactar arquivos individuais, pastas inteiras e extrair dados em sistemas Windows, Linux e macOS.

Python
import os
import zipfile

# 1. Compactar uma pasta inteira em .zip
def compactar_zip(pasta_origem, arquivo_zip_saida):
    with zipfile.ZipFile(arquivo_zip_saida, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for raiz, _, arquivos in os.walk(pasta_origem):
            for arquivo in arquivos:
                caminho_completo = os.path.join(raiz, arquivo)
                # Mantém a estrutura de pastas relativa
                caminho_relativo = os.path.relpath(caminho_completo, pasta_origem)
                zipf.write(caminho_completo, arcname=caminho_relativo)
    print(f"✅ Arquivo ZIP criado: {arquivo_zip_saida}")

# 2. Descompactar / Extrair arquivo .zip
def extrair_zip(arquivo_zip, pasta_destino):
    with zipfile.ZipFile(arquivo_zip, 'r') as zipf:
        zipf.extractall(pasta_destino)
    print(f"📦 Conteúdo extraído com sucesso em: {pasta_destino}")

# Exemplo de uso:
compactar_zip("./meus_documentos", "backup_docs.zip")
extrair_zip("backup_docs.zip", "./pasta_extraida")
Pontos-chave:

  • zipfile.ZIP_DEFLATED: Ativa a compressão real do arquivo (se omitido, o arquivo apenas agrupa os itens sem reduzir o tamanho).

  • os.path.relpath(...): Evita que o arquivo .zip grave todo o caminho absoluto do sistema operacional (ex: C:/Users/Usuario/...), salvando apenas a estrutura de pastas interna.

  • zipf.extractall(...): Extrai automaticamente todos os arquivos salvos dentro do ZIP para o diretório de destino fornecido.

2. Manipulação de Arquivos .tar.gz (Módulo tarfile)

Muito utilizado em ambientes Linux e servidores para criar tarballs compactados de alta eficiência.

Python
import tarfile

# 1. Compactar uma pasta em .tar.gz
def compactar_targz(pasta_origem, arquivo_targz_saida):
    # O modo 'w:gz' especifica escrita com compressão Gzip
    with tarfile.open(arquivo_targz_saida, "w:gz") as tar:
        tar.add(pasta_origem, arcname=os.path.basename(pasta_origem))
    print(f"✅ Arquivo TAR.GZ criado: {arquivo_targz_saida}")

# 2. Descompactar / Extrair arquivo .tar.gz
def extrair_targz(arquivo_targz, pasta_destino):
    # O modo 'r:gz' especifica leitura de arquivo Gzip
    with tarfile.open(arquivo_targz, "r:gz") as tar:
        tar.extractall(path=pasta_destino)
    print(f"📦 Conteúdo do TAR.GZ extraído em: {pasta_destino}")

# Exemplo de uso:
compactar_targz("./meus_logs", "logs_servidor.tar.gz")
extrair_targz("logs_servidor.tar.gz", "./logs_extraidos")
Pontos-chave:

  • w:gz / r:gz: O sufixo :gz indica a utilização do algoritmo Gzip para compressão/descompressão.

  • tar.add(..., arcname=...): Garante que o diretório seja adicionado de forma limpa ao pacote sem incluir a árvore de diretórios pai do sistema local.

  • tarfile.open(...): Funciona nativamente com gerenciadores de contexto (with), garantindo que o arquivo seja fechado adequadamente após o encerramento do processo.

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server