-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
import os
import re
import PyPDF2
from tkinter import Tk
from tkinter.filedialog import askdirectory
Função para extrair o nome do fornecedor e o número da nota fiscal de um PDF
def extrair_informacoes(pdf_path):
try:
with open(pdf_path, "rb") as file:
# Lê o PDF
pdf_reader = PyPDF2.PdfReader(file)
texto = ""
# Extrai o texto de todas as páginas
for page in pdf_reader.pages:
texto += page.extract_text()
# Usar regex para encontrar as informações
fornecedor = re.search(r"Emitente[\s\S]+?Nome[\s\S]+?([A-Za-zÀ-ÿ]+)", texto)
numero_nota = re.search(r"Nº\s?(\d+)", texto)
# Se encontrar, retorna as informações
if fornecedor and numero_nota:
nome_fornecedor = fornecedor.group(1)
numero = numero_nota.group(1)
return nome_fornecedor, numero
else:
return None, None
except Exception as e:
print(f"Erro ao extrair informações do PDF {pdf_path}: {e}")
return None, None
Função para renomear os arquivos PDF com base nas informações extraídas
def renomear_pdfs(caminho_pasta):
for nome_arquivo in os.listdir(caminho_pasta):
if nome_arquivo.endswith(".pdf"):
caminho_pdf = os.path.join(caminho_pasta, nome_arquivo)
nome_fornecedor, numero_nota = extrair_informacoes(caminho_pdf)
if nome_fornecedor and numero_nota:
# Resumir nome do fornecedor (pegar o primeiro nome)
nome_fornecedor_resumido = nome_fornecedor.split()[0]
# Criar novo nome para o arquivo
novo_nome = f"{nome_fornecedor_resumido}_{numero_nota}.pdf"
novo_caminho = os.path.join(caminho_pasta, novo_nome)
# Renomear o arquivo
os.rename(caminho_pdf, novo_caminho)
print(f"Renomeado: {nome_arquivo} -> {novo_nome}")
else:
print(f"Informações não encontradas para o arquivo: {nome_arquivo}")
Função para escolher a pasta
def escolher_pasta():
Tk().withdraw() # Não queremos a janela principal do Tkinter
caminho_pasta = askdirectory(title="Selecione a pasta com os PDFs") # Abre a janela de seleção de pasta
if caminho_pasta:
return caminho_pasta
else:
print("Nenhuma pasta selecionada.")
return None
Executar o processo
caminho_da_pasta = escolher_pasta()
if caminho_da_pasta:
renomear_pdfs(caminho_da_pasta)