Skip to content

Instantly share code, notes, and snippets.

@delanohelio
Created September 2, 2025 22:56
Show Gist options
  • Select an option

  • Save delanohelio/b7e8b74088c09b8feed0cbe77462a99e to your computer and use it in GitHub Desktop.

Select an option

Save delanohelio/b7e8b74088c09b8feed0cbe77462a99e to your computer and use it in GitHub Desktop.
Script gerado com ajuda de IA para extrair os pagamentos da fatura do cartão do Santander
import pdfplumber
import csv
import re
import os
import argparse
import datetime # Módulo importado para obter a data atual
def extrair_transacoes_do_pdf(caminho_pdf):
"""
Extrai transações de um arquivo PDF de fatura, tratando cada transação
como um ciclo fechado, reconhecendo valores negativos e adicionando o ano atual à data.
"""
transacoes = []
padrao_transacao = re.compile(r'(\d{2}/\d{2})\s(.*?)\s(-?\d{1,3}(?:\.\d{3})*,\d{2})')
# --- ALTERAÇÃO 1: Captura o ano atual aqui ---
ano_atual = datetime.date.today().year
if not os.path.exists(caminho_pdf):
print(f"Erro: O arquivo '{caminho_pdf}' não foi encontrado.")
return None
try:
with pdfplumber.open(caminho_pdf) as pdf:
for pagina in pdf.pages:
texto_pagina = pagina.extract_text()
if texto_pagina:
for linha in texto_pagina.split('\n'):
matches = padrao_transacao.finditer(linha)
for match in matches:
data_sem_ano = match.group(1) # Ex: "05/08"
descricao = match.group(2).strip()
valor_str = match.group(3)
# --- ALTERAÇÃO 2: Formata a data com o ano ---
data_com_ano = f"{data_sem_ano}/{ano_atual}"
transacoes.append({
"data": data_com_ano, # Usa a nova data formatada
"descrição": descricao,
"valor em real": valor_str
})
except Exception as e:
print(f"Ocorreu um erro ao processar o PDF: {e}")
return None
return transacoes
def salvar_em_csv(transacoes, nome_arquivo_saida):
"""
Salva a lista de transações em um arquivo CSV.
"""
if not transacoes:
print("Nenhuma transação foi extraída para salvar.")
return
cabecalhos = ["data", "descrição", "valor em real"]
try:
with open(nome_arquivo_saida, 'w', newline='', encoding='utf-8') as arquivo_csv:
escritor_csv = csv.DictWriter(arquivo_csv, fieldnames=cabecalhos, delimiter=';')
escritor_csv.writeheader()
escritor_csv.writerows(transacoes)
print(f"Arquivo '{nome_arquivo_saida}' gerado com sucesso com {len(transacoes)} transações.")
except Exception as e:
print(f"Ocorreu um erro ao salvar o arquivo CSV: {e}")
# --- Início da Execução do Script ---
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Extrai transações de um arquivo PDF de fatura para um arquivo CSV.")
parser.add_argument("arquivo_entrada", help="Caminho para o arquivo PDF da fatura de entrada.")
parser.add_argument("arquivo_saida", help="Caminho para o arquivo CSV de saída a ser criado.")
args = parser.parse_args()
lista_de_transacoes = extrair_transacoes_do_pdf(args.arquivo_entrada)
if lista_de_transacoes:
salvar_em_csv(lista_de_transacoes, args.arquivo_saida)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment