Programador Leigo
python 8 min leitura 2025-06-22

Módulos Python mais úteis da biblioteca padrão

A biblioteca padrão do Python é gigante. Aqui estão os módulos mais úteis que pouca gente usa.


A biblioteca padrão é um tesouro escondido

Python vem com "baterias incluídas" — centenas de módulos prontos para uso, sem instalar nada. O problema é que a maioria das pessoas só conhece os, sys e json. Vamos mudar isso.


1. collections — Estruturas de dados turbinadas

Counter: contar coisas

from collections import Counter

votos = ["Ana", "Pedro", "Ana", "Maria", "Ana", "Pedro"]
contagem = Counter(votos)

print(contagem)
# Counter({'Ana': 3, 'Pedro': 2, 'Maria': 1})

print(contagem.most_common(2))
# [('Ana', 3), ('Pedro', 2)]

defaultdict: dicionário com valor padrão

from collections import defaultdict

# Agrupar alunos por nota
alunos = [("Ana", "A"), ("Pedro", "B"), ("Maria", "A"), ("João", "B")]
grupos = defaultdict(list)

for nome, nota in alunos:
    grupos[nota].append(nome)

print(dict(grupos))
# {'A': ['Ana', 'Maria'], 'B': ['Pedro', 'João']}

Sem defaultdict, você precisaria verificar se a chave existe antes de adicionar.


2. itertools — Combinações e iterações poderosas

product: todas as combinações possíveis

from itertools import product

cores = ["vermelho", "azul"]
tamanhos = ["P", "M", "G"]

for cor, tamanho in product(cores, tamanhos):
    print(f"{cor} {tamanho}")

# vermelho P, vermelho M, vermelho G
# azul P, azul M, azul G

chain: juntar vários iteráveis

from itertools import chain

lista1 = [1, 2, 3]
lista2 = [4, 5, 6]
lista3 = [7, 8, 9]

for n in chain(lista1, lista2, lista3):
    print(n, end=" ")
# 1 2 3 4 5 6 7 8 9

groupby: agrupar elementos consecutivos

from itertools import groupby

dados = [("fruta", "maçã"), ("fruta", "banana"), ("vegetal", "cenoura"), ("vegetal", "brócolis")]

for tipo, itens in groupby(dados, key=lambda x: x[0]):
    print(f"{tipo}: {[item[1] for item in itens]}")
# fruta: ['maçã', 'banana']
# vegetal: ['cenoura', 'brócolis']

3. pathlib — Caminhos de arquivo modernos

Esqueça os.path. O pathlib é muito mais legível:

from pathlib import Path

# Criar caminho
pasta = Path("projetos") / "meu_app" / "config.json"
print(pasta)  # projetos/meu_app/config.json

# Informações do arquivo
arquivo = Path("foto.png")
print(arquivo.suffix)   # .png
print(arquivo.stem)     # foto
print(arquivo.name)     # foto.png

# Listar arquivos
for py in Path(".").glob("**/*.py"):
    print(py)

# Ler e escrever
Path("notas.txt").write_text("Olá, mundo!")
conteudo = Path("notas.txt").read_text()

4. functools — Ferramentas para funções

lru_cache: memorização automática

from functools import lru_cache

@lru_cache(maxsize=128)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(100))  # instantâneo, sem recursão explodindo
# 354224848179261915075

Sem cache, fibonacci(100) levaria uma eternidade. Com cache, é instantâneo.

partial: criar funções parciais

from functools import partial

def potencia(base, expoente):
    return base ** expoente

quadrado = partial(potencia, expoente=2)
cubo = partial(potencia, expoente=3)

print(quadrado(5))  # 25
print(cubo(3))      # 27

5. secrets — Senhas e tokens seguros

Nunca use random para segurança. Use secrets:

import secrets

# Token seguro para URLs
token = secrets.token_urlsafe(32)
print(token)  # algo como: dGhpcyBpcyBhIHRva2Vu...

# Senha aleatória
import string
alfabeto = string.ascii_letters + string.digits
senha = "".join(secrets.choice(alfabeto) for _ in range(16))
print(senha)  # algo como: kR7mN2xP9qL4vB5j

# Comparação segura contra timing attacks
secrets.compare_digest("minha_senha", entrada_usuario)

6. textwrap — Formatar texto

import textwrap

texto_longo = "Python é uma linguagem de programação de alto nível, interpretada, de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte."

# Quebrar em linhas de 40 caracteres
print(textwrap.fill(texto_longo, width=40))

# Remover indentação comum
codigo = """
    def hello():
        print("Olá")

    hello()
"""
print(textwrap.dedent(codigo))

# Encurtar texto
print(textwrap.shorten(texto_longo, width=50, placeholder="..."))
# Python é uma linguagem de programação...

7. dataclasses — Classes sem boilerplate

from dataclasses import dataclass

@dataclass
class Produto:
    nome: str
    preco: float
    estoque: int = 0

p = Produto("Notebook", 3500.00, 10)
print(p)  # Produto(nome='Notebook', preco=3500.0, estoque=10)

# Comparação automática
p2 = Produto("Notebook", 3500.00, 10)
print(p == p2)  # True

Sem @dataclass, você precisaria escrever __init__, __repr__, __eq__... tudo na mão.


8. enum — Constantes organizadas

from enum import Enum

class Status(Enum):
    PENDENTE = "pendente"
    APROVADO = "aprovado"
    REJEITADO = "rejeitado"

pedido = Status.APROVADO
print(pedido.value)  # aprovado

if pedido == Status.APROVADO:
    print("Pedido aprovado!")

# Listar todos
for s in Status:
    print(s.name, "→", s.value)

Melhor que usar strings soltas ou constantes que ninguém sabe de onde vieram.


Resumo

Módulo Para que serve
collections Counter, defaultdict, namedtuple
itertools Combinações, agrupamentos, encadeamento
pathlib Manipulação moderna de caminhos
functools Cache, funções parciais
secrets Tokens e senhas seguras
textwrap Formatação de texto
dataclasses Classes sem boilerplate
enum Constantes organizadas

A próxima vez que pensar em instalar um pacote externo, verifique se a biblioteca padrão já não resolve. Você vai se surpreender com a frequência.

Continue lendo

Compartilhar