top of page

Descompactar pastas com Python

Atualizado: 27 de mai.


Script em Python para descompactar pastas, clique para acessar o github

Não é necessário instalar nenhuma biblioteca, apenas ter o Python instalado na máquina.

Utilizei o VSCode para executar o código ea biblioteca nativa tkinter.





import tkinter as tk

from tkinter import filedialog, messagebox

import zipfile

import os


# Função para descompactar o arquivo zipado

def descompactar_arquivo():

# Obtendo os caminhos e o nome da pasta

caminho_origem = entrada_origem.get()

caminho_destino = entrada_destino.get()

nome_pasta = entrada_pasta.get()


# Verificando se todos os campos foram preenchidos

if not caminho_origem or not caminho_destino or not nome_pasta:

label_status.config(text="Por favor, insira o caminho do arquivo, destino e nome da pasta", fg="red")

return


# Verificando se o arquivo de origem existe

if not os.path.exists(caminho_origem):

label_status.config(text="O arquivo de origem não existe", fg="red")

return


# Criando o caminho completo da pasta de destino

pasta_destino = os.path.join(caminho_destino, nome_pasta)

if os.path.exists(pasta_destino):

messagebox.showwarning("Aviso", "A pasta de destino já existe")

return


try:

# Criando a pasta de destino

os.makedirs(pasta_destino)

# Descompactando o arquivo zipado na pasta de destino

with zipfile.ZipFile(caminho_origem, 'r') as zip_ref:

zip_ref.extractall(pasta_destino)

label_status.config(text="Arquivo descompactado com sucesso", fg="#00975C")

except Exception as e:

label_status.config(text=f"Erro ao descompactar o arquivo: {e}", fg="red")


# Função para limpar os campos de entrada

def limpar_campos():

entrada_origem.delete(0, tk.END)

entrada_destino.delete(0, tk.END)

entrada_pasta.delete(0, tk.END)

label_status.config(text="", fg="black")


# Função para sair do aplicativo

def sair_aplicativo():

janela_principal.destroy()


# Criando a janela principal

janela_principal = tk.Tk()

janela_principal.title("Descompactador de Arquivo")


# Label e Entry para o caminho do arquivo zipado

label_origem = tk.Label(janela_principal, text="Caminho do arquivo zipado:")

label_origem.grid(row=0, column=0, padx=5, pady=5, sticky="w")

entrada_origem = tk.Entry(janela_principal, width=50)

entrada_origem.grid(row=0, column=1, padx=5, pady=5)


# Botão para selecionar o arquivo zipado

botao_origem = tk.Button(janela_principal, text="Selecionar Arquivo", command=lambda: entrada_origem.insert(tk.END, filedialog.askopenfilename()))

botao_origem.grid(row=0, column=2, padx=5, pady=5)


# Label e Entry para o caminho de destino

label_destino = tk.Label(janela_principal, text="Caminho de destino:")

label_destino.grid(row=1, column=0, padx=5, pady=5, sticky="w")

entrada_destino = tk.Entry(janela_principal, width=50)

entrada_destino.grid(row=1, column=1, padx=5, pady=5)


# Botão para selecionar o caminho de destino

botao_destino = tk.Button(janela_principal, text="Selecionar Destino", command=lambda: entrada_destino.insert(tk.END, filedialog.askdirectory()))

botao_destino.grid(row=1, column=2, padx=5, pady=5)


# Label e Entry para o nome da pasta

label_pasta = tk.Label(janela_principal, text="Nome da pasta a ser criada:")

label_pasta.grid(row=2, column=0, padx=5, pady=5, sticky="w")

entrada_pasta = tk.Entry(janela_principal, width=50)

entrada_pasta.grid(row=2, column=1, padx=5, pady=5)


# Botão para descompactar o arquivo

botao_descompactar = tk.Button(janela_principal, text="Descompactar", command=descompactar_arquivo, bg="#00975C", fg="white")

botao_descompactar.grid(row=3, column=0, columnspan=3, padx=5, pady=5)


# Botão para limpar os campos

botao_limpar = tk.Button(janela_principal, text="Limpar Campos", command=limpar_campos)

botao_limpar.grid(row=4, column=0, padx=5, pady=5, sticky="ew")


# Botão para sair

botao_sair = tk.Button(janela_principal, text="Sair", command=sair_aplicativo)

botao_sair.grid(row=4, column=1, padx=5, pady=5, sticky="ew")


# Label para exibir o status

label_status = tk.Label(janela_principal, text="", fg="black")

label_status.grid(row=5, column=0, columnspan=3, padx=5, pady=5)


janela_principal.mainloop()

bottom of page