Python
Automação com Python: Scripts que Resolvem Problemas Reais
25 de maio de 2026·Paulo Pereira
Por que Automatizar com Python?
Python tem o melhor ecossistema de automação: bibliotecas para qualquer tarefa, sintaxe clara e uma comunidade enorme. Se você repete algo mais de 3 vezes, vale automatizar.
Manipulação de Arquivos em Massa
from pathlib import Path
import shutil
from datetime import datetime
def organizar_downloads(pasta: Path):
extensoes = {
'.pdf': 'documentos',
'.jpg': 'imagens', '.jpeg': 'imagens', '.png': 'imagens',
'.mp4': 'videos', '.mov': 'videos',
'.zip': 'compactados',
}
for arquivo in pasta.iterdir():
if arquivo.is_file() and arquivo.suffix in extensoes:
destino = pasta / extensoes[arquivo.suffix]
destino.mkdir(exist_ok=True)
shutil.move(str(arquivo), destino / arquivo.name)
organizar_downloads(Path.home() / "Downloads")Planilhas Excel com openpyxl
import openpyxl
from openpyxl.styles import Font, PatternFill
from openpyxl.utils import get_column_letter
def gerar_relatorio(dados: list[dict], arquivo: str):
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "Relatório"
cabecalhos = list(dados[0].keys()) if dados else []
for col, cabecalho in enumerate(cabecalhos, 1):
cell = ws.cell(row=1, column=col, value=cabecalho)
cell.font = Font(bold=True, color="FFFFFF")
cell.fill = PatternFill("solid", fgColor="1F4E79")
for linha, item in enumerate(dados, 2):
for col, chave in enumerate(cabecalhos, 1):
ws.cell(row=linha, column=col, value=item.get(chave))
# Auto-ajusta largura das colunas
for col in range(1, len(cabecalhos) + 1):
ws.column_dimensions[get_column_letter(col)].auto_size = True
wb.save(arquivo)Envio de E-mail com Relatório
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import os
def enviar_relatorio(destinatario: str, assunto: str, arquivo: str):
msg = MIMEMultipart()
msg['From'] = os.environ['EMAIL_REMETENTE']
msg['To'] = destinatario
msg['Subject'] = assunto
msg.attach(MIMEText("Relatório em anexo.", 'plain'))
with open(arquivo, 'rb') as f:
parte = MIMEBase('application', 'octet-stream')
parte.set_payload(f.read())
encoders.encode_base64(parte)
parte.add_header('Content-Disposition', f'attachment; filename={os.path.basename(arquivo)}')
msg.attach(parte)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
server.login(os.environ['EMAIL_REMETENTE'], os.environ['EMAIL_SENHA'])
server.send_message(msg)Web Scraping com BeautifulSoup
import requests
from bs4 import BeautifulSoup
import pandas as pd
def scrape_noticias(url: str) -> list[dict]:
headers = {'User-Agent': 'Mozilla/5.0'}
resp = requests.get(url, headers=headers, timeout=10)
soup = BeautifulSoup(resp.text, 'html.parser')
noticias = []
for artigo in soup.select('article.noticia'):
titulo = artigo.select_one('h2').get_text(strip=True)
link = artigo.select_one('a')['href']
data = artigo.select_one('time')['datetime']
noticias.append({'titulo': titulo, 'link': link, 'data': data})
return noticias
# Salva em CSV
df = pd.DataFrame(scrape_noticias("https://exemplo.com"))
df.to_csv("noticias.csv", index=False, encoding='utf-8-sig')Agendamento com schedule
import schedule
import time
def tarefa_diaria():
dados = coletar_dados()
gerar_relatorio(dados, "relatorio.xlsx")
enviar_relatorio("gestor@empresa.com", "Relatório Diário", "relatorio.xlsx")
print("Relatório enviado!")
schedule.every().day.at("08:00").do(tarefa_diaria)
schedule.every().monday.at("09:00").do(backup_semanal)
while True:
schedule.run_pending()
time.sleep(60)CLI com Click
import click
@click.group()
def cli():
pass
@cli.command()
@click.argument('pasta', type=click.Path(exists=True))
@click.option('--dry-run', is_flag=True, help='Apenas simula, sem mover arquivos')
def organizar(pasta, dry_run):
"""Organiza arquivos da PASTA por tipo."""
if dry_run:
click.echo(f"[DRY RUN] Organizaria: {pasta}")
else:
organizar_downloads(Path(pasta))
click.echo(f"Pasta organizada: {pasta}")
if __name__ == '__main__':
cli()Conclusão
Python brilha na automação de tarefas repetitivas. Com as bibliotecas certas, você elimina horas de trabalho manual. Comece pelos pontos de dor do seu dia a dia — provavelmente há um script Python esperando para resolver cada um deles.