Created
September 2, 2025 22:56
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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