Python virou a linguagem preferida de contadores que querem automatizar sua rotina. Não é necessário ter formação em TI — alguns conceitos básicos são suficientes para eliminar horas de trabalho manual por semana. Este guia mostra como começar do zero e os primeiros projetos práticos de automação fiscal.
Por que Python e não Excel avançado?
O Excel resolve muita coisa, e Power Query é uma excelente evolução. Mas Python tem vantagens claras para automação contábil:
- Repetibilidade total: um script Python executa exatamente a mesma lógica toda vez, sem erros humanos de copiar/colar
- Escala: processa 10 clientes com a mesma facilidade que processa 1
- Integração: conecta com APIs de bancos, ERPs, SEFAZ, e-mail, Slack — tudo no mesmo script
- Custo zero: Python é gratuito e open source
Instalação em 5 minutos
- Acesse python.org e baixe a versão mais recente
- Instale marcando a opção “Add Python to PATH”
- Abra o terminal e execute:
pip install pandas openpyxl requests - Ou instale o Anaconda (inclui tudo pré-instalado, mais fácil para iniciantes)
Um editor de código gratuito como VS Code ou PyCharm Community facilita muito o desenvolvimento.
Fundamentos que um contador precisa saber
Variáveis e tipos de dados
# Variáveis simples
empresa = "Comércio ABC Ltda"
cnpj = "12.345.678/0001-99"
faturamento = 150000.50
ativo = True
# Lista de clientes
clientes = ["Empresa A", "Empresa B", "Empresa C"]
# Dicionário (como uma linha de planilha)
nota = {
"numero": "NF-1234",
"valor": 5600.00,
"icms": 840.00,
"data": "2026-01-15"
}
Lendo e manipulando planilhas com pandas
import pandas as pd
# Carrega a planilha
df = pd.read_excel("lancamentos_janeiro.xlsx")
# Filtra só as notas de saída
saidas = df[df['tipo'] == 'SAIDA']
# Soma por categoria
total_por_categoria = saidas.groupby('categoria')['valor'].sum()
# Salva o resultado numa nova planilha
total_por_categoria.to_excel("resumo_saidas.xlsx")
print(total_por_categoria)
Lendo arquivos XML (NF-e)
import xml.etree.ElementTree as ET
# Lê o arquivo XML da nota fiscal
tree = ET.parse("nfe_001.xml")
root = tree.getroot()
# Namespace da NF-e
ns = {'nfe': 'http://www.portalfiscal.inf.br/nfe'}
# Extrai valores
chave = root.find('.//nfe:chNFe', ns).text
valor_total = root.find('.//nfe:vNF', ns).text
icms = root.find('.//nfe:vICMS', ns).text
print(f"Chave: {chave}")
print(f"Valor total: R$ {valor_total}")
print(f"ICMS: R$ {icms}")
Projeto 1: Consolidador de NF-e de um período
Este script lê todas as NF-e XML de uma pasta e gera uma planilha consolidada:
import xml.etree.ElementTree as ET
import pandas as pd
import os
ns = {'nfe': 'http://www.portalfiscal.inf.br/nfe'}
pasta = "notas_janeiro_2026"
registros = []
for arquivo in os.listdir(pasta):
if arquivo.endswith('.xml'):
tree = ET.parse(os.path.join(pasta, arquivo))
root = tree.getroot()
try:
nota = {
'numero': root.find('.//nfe:nNF', ns).text,
'emitente': root.find('.//nfe:emit/nfe:xNome', ns).text,
'cnpj_emit': root.find('.//nfe:emit/nfe:CNPJ', ns).text,
'data_emissao': root.find('.//nfe:dhEmi', ns).text[:10],
'valor_total': float(root.find('.//nfe:vNF', ns).text),
'icms': float(root.find('.//nfe:vICMS', ns).text or 0),
'pis': float(root.find('.//nfe:vPIS', ns).text or 0),
'cofins': float(root.find('.//nfe:vCOFINS', ns).text or 0),
}
registros.append(nota)
except AttributeError:
print(f"Erro ao processar {arquivo}")
df = pd.DataFrame(registros)
df.to_excel("consolidado_nfe_jan2026.xlsx", index=False)
print(f"Processadas {len(registros)} notas. Total: R$ {df['valor_total'].sum():,.2f}")
Projeto 2: Detector de divergências entre SPED e ERP
import pandas as pd
# Carrega os dados
sped = pd.read_excel("sped_efd.xlsx") # exportado do validador SPED
erp = pd.read_excel("erp_lancamentos.xlsx") # exportado do sistema ERP
# Normaliza CNPJ
sped['cnpj'] = sped['cnpj'].str.replace(r'D', '', regex=True)
erp['cnpj'] = erp['cnpj'].str.replace(r'D', '', regex=True)
# Merge para comparar
merged = pd.merge(sped, erp, on=['cnpj', 'numero_nf'], how='outer',
suffixes=('_sped', '_erp'))
# Identifica divergências
merged['divergencia'] = abs(merged['valor_sped'] - merged['valor_erp']) > 0.01
divergencias = merged[merged['divergencia'] == True]
divergencias.to_excel("divergencias_encontradas.xlsx", index=False)
print(f"Encontradas {len(divergencias)} divergências para revisar")
Projeto 3: Relatório automático de indicadores financeiros
import pandas as pd
# Lê DRE do ERP (exemplo simplificado)
dre = pd.read_excel("dre_2026.xlsx")
receita_bruta = dre.loc[dre['conta'] == 'RECEITA_BRUTA', 'valor'].sum()
deducoes = dre.loc[dre['conta'] == 'DEDUCOES', 'valor'].sum()
receita_liquida = receita_bruta - deducoes
custo = dre.loc[dre['conta'] == 'CMV', 'valor'].sum()
lucro_bruto = receita_liquida - custo
despesas = dre.loc[dre['conta'] == 'DESPESAS_OPERACIONAIS', 'valor'].sum()
ebitda = lucro_bruto - despesas
print("=== RELATÓRIO EXECUTIVO ===")
print(f"Receita Bruta: R$ {receita_bruta:>12,.2f}")
print(f"Receita Líquida: R$ {receita_liquida:>12,.2f}")
print(f"Lucro Bruto: R$ {lucro_bruto:>12,.2f}")
print(f"Margem Bruta: {(lucro_bruto/receita_liquida*100):>11.1f}%")
print(f"EBITDA: R$ {ebitda:>12,.2f}")
print(f"Margem EBITDA: {(ebitda/receita_liquida*100):>11.1f}%")
Próximos passos
Com esses fundamentos, você pode evoluir para:
- Automação de envio por e-mail dos relatórios para cada cliente
- Dashboards interativos com Streamlit ou Power BI via Python
- Integração com APIs de ERPs (Omie, Bling, Nibo têm APIs bem documentadas)
- Automação de geração de arquivos SPED com bibliotecas especializadas
O contador que aprende Python não vai substituir o contador — vai se tornar o contador mais competitivo do mercado.
Tem um projeto em mente?
Somos especialistas em transformar ideias em produtos digitais. Apps, sites, automações e IA — vamos construir juntos.