Python Módulos da Biblioteca Padrão
O Python vem com "pilhas incluídas": junto com ele, chegam centenas de módulos prontos, a chamada biblioteca padrão (em inglês, standard library). Para usar um deles basta um import, sem instalar nada (aula Módulos e import). Esta página reúne os mais úteis no dia a dia, agrupados por assunto, com uma linha sobre o que cada um faz, um exemplo com o resultado de verdade e o link para a aula, quando há uma. A lista completa está na documentação oficial.
Como ler as tabelas
- Cada exemplo supõe que o módulo já foi importado: o exemplo
math.sqrt(16) vem depois de um import math.
- O resultado é o que o Python 3.14.4 respondeu no computador da Ana, escrito como o modo interativo mostra (textos entre aspas).
- Quando o resultado muda a cada execução (sorteios, hora, nomes de pasta temporária), a tabela avisa.
- A marca (não no editor) quer dizer que aquilo não funciona no editor do guia, que roda o Python dentro do navegador. No terminal, funciona.
Pule direto para o grupo:
- Números e contas:
math, random, statistics, decimal, fractions
- Textos:
string, re, textwrap, unicodedata, difflib
- Datas e tempo:
datetime, time, calendar, zoneinfo
- Coleções e funções:
collections, itertools, functools, operator, heapq, bisect, copy, dataclasses, enum, typing
- Arquivos e pastas:
pathlib, os, shutil, glob, tempfile, zipfile, gzip
- Formatos de dados:
json, csv, sqlite3, tomllib, base64
- Sistema e programas:
sys, os, subprocess, argparse, logging, platform, shlex, threading, asyncio
- Internet e segurança:
urllib, html, http.server, hashlib, secrets, uuid
- Testes e depuração:
unittest, doctest, pdb, timeit, keyword
- Novidades do Python 3.14:
compression.zstd, annotationlib, string.templatelib
Números e contas
| Módulo | Para que serve | Exemplo | Resultado | Aula |
math | Funções matemáticas: raiz, arredondar para cima e para baixo, π, fatorial… | math.sqrt(16) | 4.0 | O Módulo math |
| | math.ceil(4.1), math.floor(4.9) | 5, 4 | |
| | math.pi | 3.141592653589793 | |
| Comparar float sem cair no problema do 0.1 + 0.2 | math.isclose(0.1 + 0.2, 0.3) | True | Números |
random | Sorteios: números, itens de uma lista, embaralhar | random.randint(1, 6) | um número de 1 a 6 (muda a cada vez) | O Módulo random |
| | random.choice(["arroz", "feijão", "café"]) | um dos três (muda a cada vez) | |
statistics | Média, mediana, moda, desvio padrão | statistics.mean([7.5, 8.0, 6.5, 9.0]) | 7.75 | — |
| | statistics.median([7.5, 8.0, 6.5, 9.0]) | 7.75 | |
| | statistics.mode(["P", "M", "M", "G"]) | 'M' | |
decimal | Números decimais exatos, para dinheiro (0.1 + 0.2 dá 0.30000000000000004 com float) | Decimal("0.1") + Decimal("0.2") | Decimal('0.3') | — |
fractions | Frações exatas | Fraction(1, 3) + Fraction(1, 6) | Fraction(1, 2) | — |
(Decimal e Fraction vêm de from decimal import Decimal e from fractions import Fraction.)
Textos
| Módulo | Para que serve | Exemplo | Resultado | Aula |
string | Constantes com letras, dígitos e pontuação; o Template com $nome | string.ascii_uppercase | 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' | Métodos de String |
| | string.Template("Olá, $nome!").substitute(nome="Ana") | 'Olá, Ana!' | |
re | Expressões regulares: procurar padrões num texto | re.findall(r"\d+", "Rua 7, casa 42, CEP 64000") | ['7', '42', '64000'] | Expressões Regulares |
textwrap | Quebrar um texto longo em linhas, ou encurtá-lo | textwrap.wrap("A padaria do bairro abre cedo todos os dias", width=15) | ['A padaria do', 'bairro abre', 'cedo todos os', 'dias'] | — |
| | textwrap.shorten("A padaria do bairro abre cedo todos os dias", width=25) | 'A padaria do bairro [...]' | |
unicodedata | Informações sobre cada caractere; tirar acentos | unicodedata.normalize("NFD", "ação").encode("ascii", "ignore").decode() | 'acao' | Caracteres de Escape |
difflib | Comparar textos; achar a palavra "mais parecida" (para um "você quis dizer…?") | difflib.get_close_matches("feijao", ["feijão", "arroz", "macarrão"]) | ['feijão'] | — |
Para formatar números e datas dentro de textos, você não precisa de módulo: veja a Referência de Formatação.
Datas e tempo
| Módulo | Para que serve | Exemplo | Resultado | Aula |
datetime | Datas, horas, contas com datas | datetime.date(2026, 12, 25) - datetime.date(2026, 10, 18) | datetime.timedelta(days=68) (68 dias até o Natal) | Datas e Horas |
| | datetime.datetime(2026, 10, 18, 14, 30) + datetime.timedelta(hours=3) | datetime.datetime(2026, 10, 18, 17, 30) | |
| Dia da semana (0 = segunda, 6 = domingo) | datetime.date(2026, 10, 18).weekday() | 6 | |
| A data de hoje, a hora de agora | datetime.date.today(), datetime.datetime.now() | muda a cada dia (e a cada segundo) | |
time | Esperar alguns segundos; medir tempo | time.sleep(2) | o programa para 2 segundos | — |
| | time.time() | os segundos desde 1/1/1970, um float (muda sempre) | |
calendar | Calendários: ano bissexto, dias do mês | calendar.isleap(2028) | True | — |
| Em que dia da semana o mês começa e quantos dias tem | calendar.monthrange(2026, 2) | (calendar.SUNDAY, 28) | |
zoneinfo | Fusos horários | datetime.datetime(2026, 10, 18, 14, 30, tzinfo=zoneinfo.ZoneInfo("America/Sao_Paulo")).isoformat() | '2026-10-18T14:30:00-03:00' | Datas e Horas |
Coleções e funções
| Módulo | Para que serve | Exemplo | Resultado | Aula |
collections | Coleções especiais. Counter conta quantas vezes cada item aparece | collections.Counter("banana") | Counter({'a': 3, 'n': 2, 'b': 1}) | O Módulo collections |
| | collections.Counter(["P", "M", "M", "G"]).most_common(1) | [('M', 2)] | |
| defaultdict: um dicionário que cria a chave sozinho; também deque, namedtuple | collections.defaultdict(int) | defaultdict(<class 'int'>, {}) | |
itertools | Ferramentas para laços: combinações, permutações, juntar, acumular | list(itertools.combinations([1, 2, 3], 2)) | [(1, 2), (1, 3), (2, 3)] | O Módulo itertools |
| | list(itertools.permutations("ABC", 2)) | [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')] | |
| | list(itertools.accumulate([10, 20, 30])) | [10, 30, 60] | |
functools | Ferramentas para funções: reduce, lru_cache (guardar resultados), partial | functools.reduce(operator.mul, [1, 2, 3, 4]) | 24 | Decoradores |
operator | Os operadores (+, *, []) como funções, bons para key= | sorted([("Ana", 9), ("Bia", 7)], key=operator.itemgetter(1)) | [('Bia', 7), ('Ana', 9)] | Ordenando Listas |
heapq | Os menores (ou maiores) itens, sem ordenar tudo | heapq.nsmallest(2, [30, 4, 12, 8]) | [4, 8] | — |
bisect | Em que posição um valor entra numa lista já ordenada | bisect.bisect([0, 5, 7, 9], 8) | 3 | — |
copy | Cópia rasa (copy) e cópia profunda (deepcopy) | copy.deepcopy([[1, 2], [3]]) | [[1, 2], [3]] (uma lista nova, com listas novas dentro) | Cópia Rasa e Profunda |
dataclasses | Classes que só guardam dados, sem escrever o __init__ | @dataclasses.dataclass numa classe Produto | Produto(nome='café', preco=18.5) | Dataclasses |
enum | Uma lista fixa de opções com nome (cores, estados) | class Cor(enum.Enum): VERDE = 1 e Cor(1) | Cor.VERDE | Enum |
typing | Tipos extras para as dicas de tipo (Any, Callable, Literal…) | def f(x: typing.Any) -> None: | (só uma dica; não muda o que o programa faz) | Dicas de Tipo |
Arquivos e pastas
| Módulo | Para que serve | Exemplo | Resultado | Aula |
pathlib | Caminhos de arquivos e pastas, do jeito moderno | pathlib.Path("/home/ana/fotos/praia.jpg").name | 'praia.jpg' | Pastas e Caminhos |
| | pathlib.Path("/home/ana/fotos/praia.jpg").parent | PosixPath('/home/ana/fotos') | |
| | pathlib.Path("notas.txt").suffix | '.txt' | |
| A pasta pessoal | pathlib.Path.home() | PosixPath('/home/ana') | |
os / os.path | O jeito antigo de lidar com caminhos; a pasta atual | os.path.join("fotos", "praia.jpg") | 'fotos/praia.jpg' | Os Módulos os e sys |
| | os.getcwd() | '/home/ana' | |
shutil | Copiar, mover e apagar arquivos e pastas inteiras | shutil.copy("notas.txt", "copia.txt") | cria copia.txt igual ao original | — |
glob | Listar arquivos com curinga (*.txt) | sorted(glob.glob("*.toml")) | [] (não havia nenhum .toml na pasta) | Pastas e Caminhos |
tempfile | Arquivos e pastas temporários, que somem no fim | with tempfile.TemporaryDirectory() as pasta: | uma pasta em /tmp/ com nome sorteado (muda sempre) | — |
zipfile | Criar e ler arquivos .zip | zipfile.ZipFile("pacote.zip").namelist() | ['notas.txt'] | — |
gzip | Compactar e descompactar no formato .gz | gzip.decompress(gzip.compress(b"oi")) | b'oi' | — |
Formatos de dados
| Módulo | Para que serve | Exemplo | Resultado | Aula |
json | Ler e escrever JSON, o formato de dados da web | json.dumps({"nome": "Ana", "idade": 30}) | '{"nome": "Ana", "idade": 30}' | JSON |
| Acentos legíveis no arquivo | json.dumps({"nome": "Conceição"}, ensure_ascii=False) | '{"nome": "Conceição"}' | |
| De texto para dicionário | json.loads('{"preco": 5.5}')["preco"] | 5.5 | |
csv | Planilhas em texto, separadas por vírgula | list(csv.reader(["nome,nota", "Ana,9"])) | [['nome', 'nota'], ['Ana', '9']] | Arquivos CSV |
sqlite3 | Um banco de dados SQL completo, num arquivo só | sqlite3.connect(":memory:").execute("SELECT 2 + 3").fetchone() | (5,) | Python com Banco de Dados |
| A versão do SQLite que veio junto | sqlite3.sqlite_version | '3.46.1' no Ubuntu da Ana (no editor do guia, outra) | |
tomllib | Ler arquivos de configuração .toml | tomllib.loads('nome = "Ana"\nidade = 30') | {'nome': 'Ana', 'idade': 30} | — |
base64 | Transformar bytes em texto "seguro" (para e-mail, web) e voltar | base64.b64encode(b"Ana") | b'QW5h' | — |
Sistema e programas
| Módulo | Para que serve | Exemplo | Resultado | Aula |
sys | O próprio Python: versão, argumentos do programa (sys.argv), sair (sys.exit) | sys.version_info[:2] | (3, 14) | Os Módulos os e sys |
os | O sistema operacional: variáveis de ambiente, pastas, processos | os.environ["HOME"] | '/home/ana' | Os Módulos os e sys |
subprocess | Rodar outros programas do computador (não no editor) | subprocess.run(["echo", "oi"], capture_output=True, text=True).stdout | 'oi\n' | Rodando Outros Programas |
argparse | Opções de linha de comando (--ajuda, -v…) | p.add_argument("nome") e p.parse_args(["Ana"]) | Namespace(nome='Ana') | argparse |
logging | Mensagens de registro (avisos, erros), melhores que print | logging.warning("estoque baixo: %s", "café") | mostra WARNING:root:estoque baixo: café | logging |
platform | Informações sobre a máquina e o Python | platform.python_version() | '3.14.4' | — |
shlex | Dividir uma linha de comando como o terminal divide | shlex.split('cp "minhas fotos" backup') | ['cp', 'minhas fotos', 'backup'] | — |
threading | Fazer coisas "ao mesmo tempo", com threads (não no editor) | threading.Thread(target=print, args=("da thread",)).start() | mostra da thread | — |
asyncio | Programação assíncrona: esperar várias coisas sem travar (async/await) | asyncio.run(dizer()), com dizer uma async def que devolve "pronto" | 'pronto' | Programação Assíncrona |
venv | Ambientes virtuais, usado pelo terminal: python3 -m venv .venv (não no editor) | — | cria a pasta .venv | Ambientes Virtuais |
Internet e segurança
| Módulo | Para que serve | Exemplo | Resultado | Aula |
urllib.parse | Montar e desmontar endereços da web | urllib.parse.quote("pão de queijo") | 'p%C3%A3o%20de%20queijo' | — |
| | urllib.parse.urlparse("https://exemplo.com/busca?q=pão").query | 'q=pão' | |
urllib.request | Baixar páginas e arquivos da internet (não no editor: sem rede) | urllib.request.urlopen("https://…") | a resposta do site | — |
html | Escapar textos para pôr numa página HTML | html.escape("<b>Ana & Bia</b>") | '<b>Ana & Bia</b>' | — |
http.server | Um servidor web simples, pelo terminal: python3 -m http.server | — | serve os arquivos da pasta em http://localhost:8000 | — |
hashlib | Resumos criptográficos (SHA-256, MD5): conferir se um arquivo mudou | hashlib.sha256(b"Ana").hexdigest()[:16] | 'dea210f058b407db' (os 16 primeiros caracteres) | — |
secrets | Sorteios seguros, para senhas e códigos (o random não serve para isso) | secrets.token_hex(8) | 16 caracteres hexadecimais sorteados (muda sempre) | O Módulo random |
uuid | Identificadores únicos | uuid.uuid5(uuid.NAMESPACE_DNS, "exemplo.com") | UUID('3d47b575-50ba-5ea3-80b4-5f4b1f98bec0') | — |
| | uuid.uuid4() | um identificador sorteado (muda sempre) | |
Testes e depuração
| Módulo | Para que serve | Exemplo | Resultado | Aula |
unittest | Testes automáticos, em classes | python3 -m unittest | roda os testes e mostra OK ou as falhas | Testes |
doctest | Testa os exemplos >>> escritos nas docstrings | python3 -m doctest arquivo.py | sem saída quando tudo passa | Testes, Docstrings |
pdb | O depurador: parar o programa e examinar as variáveis | breakpoint() no meio do código | abre o prompt (Pdb) | Depurando com pdb |
timeit | Medir quanto tempo um trecho leva | python3 -m timeit "sum(range(1000))" | o tempo médio (muda de computador para computador) | — |
keyword | As palavras reservadas do Python | keyword.iskeyword("for") | True | Palavras-chave |
Novidades do Python 3.14 3.14
| Módulo | Para que serve | Exemplo | Resultado | Aula |
compression.zstd | Compactação no formato Zstandard (.zst), rápida e moderna. O novo pacote compression também reúne gzip, bz2, lzma e zlib | zstd.decompress(zstd.compress(b"oi")), com import compression.zstd as zstd | b'oi' | Novidades |
annotationlib | Examinar as dicas de tipo, agora calculadas só quando alguém pede | annotationlib.get_annotations(funcao) | o dicionário com as dicas | Dicas de Tipo |
string.templatelib | As template strings: t"…" em vez de f"…" guarda as partes separadas, para outro código montar o texto com segurança | t = t"Olá, {nome}" e t.strings, t.values | ('Olá, ', ''), ('Ana',) | Novidades |
Se você tem o Python 3.13 (o do Debian 13)
Estes três módulos não existem antes do 3.14: import compression.zstd dá ModuleNotFoundError. Todos os outros desta página funcionam no 3.13.
O que não vem instalado (ou não funciona no editor)
| Módulo | No Ubuntu da Ana | No editor do guia |
tkinter, turtle (janelas e desenho) | Fazem parte da biblioteca padrão, mas o Ubuntu os separa num pacote à parte: sem ele, import turtle termina em ImportError: No module named 'tkinter', please install the python3-tk package | ModuleNotFoundError: não existem no navegador |
subprocess, threading | Funcionam | Importam, mas dão erro ao usar: OSError: [Errno 138] emscripten does not support processes. e RuntimeError: can't start new thread |
urllib.request (internet) | Funciona, se houver conexão | Sem rede: com um endereço https://…, o urlopen termina em RuntimeError: TLS not supported in this environment |
venv, readline, curses | Funcionam | ModuleNotFoundError |
E os pacotes que não são da biblioteca padrão, como requests e numpy? Esses se instalam com o pip, dentro de um ambiente virtual: veja as aulas pip e venv.
Experimente
Missão: use o statistics para mostrar a média das notas (Média: 7.75) e o Counter do collections para mostrar o tamanho de camiseta mais pedido (Mais pedido: M). Não esqueça os import.
notas = [7.5, 8.0, 6.5, 9.0]
tamanhos = ["P", "M", "M", "G"]
print("Média:", 0)
print("Mais pedido:", "?")
import statistics
from collections import Counter
notas = [7.5, 8.0, 6.5, 9.0]
tamanhos = ["P", "M", "M", "G"]
print("Média:", statistics.mean(notas))
print("Mais pedido:", Counter(tamanhos).most_common(1)[0][0])
Experimente à vontade: troque os exemplos, importe outros módulos desta página e veja os resultados no editor.
import math
import datetime
import textwrap
import difflib
print(math.sqrt(16))
print(datetime.date(2026, 12, 25) - datetime.date(2026, 10, 18))
print(textwrap.wrap("A padaria do bairro abre cedo todos os dias", width=15))
print(difflib.get_close_matches("feijao", ["feijão", "arroz", "macarrão"]))