Strings são uma das estruturas de dados mais utilizadas em Python. Elas representam texto e aparecem em praticamente todos os programas, desde simples mensagens até processamento complexo de dados. Neste guia completo, você aprenderá tudo sobre manipulação, formatação e operações com strings em Python.
🎯 O Que São Strings?
Uma string é uma sequência de caracteres delimitada por aspas simples ('), duplas (") ou triplas (''' ou """). Em Python, strings são imutáveis, o que significa que uma vez criadas, não podem ser modificadas - apenas substituídas.
# Diferentes formas de criar strings
nome = 'Ana Silva'
mensagem = "Bem-vindo ao Universo Python!"
descricao = """Este é um texto
com múltiplas linhas
preservando quebras"""
# String vazia
vazio = ""
vazio2 = str()
# Conversão para string
numero = 42
texto = str(numero) # "42"
📝 Criando e Acessando Strings
Indexação e Fatiamento
Strings em Python são indexadas como listas, permitindo acesso individual a caracteres:
linguagem = "Python"
# Acessar primeiro caractere (índice 0)
print(linguagem[0]) # P
# Acessar último caractere
print(linguagem[-1]) # n
# Fatiamento (slicing)
print(linguagem[0:3]) # Pyt
print(linguagem[:3]) # Pyt (mesmo resultado)
print(linguagem[3:]) # hon
print(linguagem[::2]) # Pto (pula de 2 em 2)
print(linguagem[::-1]) # nohtyP (inverter string)
# Comprimento
print(len(linguagem)) # 6
🔄 Métodos Essenciais de Strings
Transformação de Caixa
texto = "Python é Incrível"
print(texto.upper()) # PYTHON É INCRÍVEL
print(texto.lower()) # python é incrível
print(texto.capitalize()) # Python é incrível
print(texto.title()) # Python É Incrível
print(texto.swapcase()) # pYTHON É iNCRÍVEL
# Verificações
print("PYTHON".isupper()) # True
print("python".islower()) # True
print("Python".istitle()) # True
Busca e Verificação
frase = "Aprender Python é divertido e poderoso"
# Procurar substring
print(frase.find("Python")) # 9 (posição inicial)
print(frase.find("Java")) # -1 (não encontrado)
# Procurar do final
print(frase.rfind("o")) # 39 (última ocorrência)
# Verificar se começa/termina
print(frase.startswith("Aprender")) # True
print(frase.endswith("poderoso")) # True
# Verificar presença
print("Python" in frase) # True
print("Java" not in frase) # True
# Contar ocorrências
print(frase.count("o")) # 4
print(frase.count("Python")) # 1
Limpeza e Remoção
texto = " Python "
# Remover espaços
print(texto.strip()) # "Python"
print(texto.lstrip()) # "Python "
print(texto.rstrip()) # " Python"
# Remover caracteres específicos
url = "https://exemplo.com/"
print(url.strip("https://")) # exemplo.com/
print(url.rstrip("/")) # https://exemplo.com
# Remover prefixo/sufixo (Python 3.9+)
arquivo = "documento.txt"
print(arquivo.removesuffix(".txt")) # documento
🎨 Formatação de Strings
1. F-strings (Recomendado - Python 3.6+)
A forma mais moderna e legível de formatar strings em Python:
nome = "Ana"
idade = 28
altura = 1.65
# Básico
print(f"Olá, {nome}!") # Olá, Ana!
# Expressões
print(f"{nome} tem {idade} anos")
print(f"Ano que vem terá {idade + 1} anos")
# Formatação de números
preco = 1234.5
print(f"R$ {preco:.2f}") # R$ 1234.50
print(f"R$ {preco:,.2f}") # R$ 1,234.50
# Alinhamento
print(f"{nome:>10}") # " Ana" (direita)
print(f"{nome:<10}") # "Ana " (esquerda)
print(f"{nome:^10}") # " Ana " (centro)
# Padding com zeros
numero = 42
print(f"{numero:05d}") # 00042
# Porcentagem
taxa = 0.1543
print(f"{taxa:.1%}") # 15.4%
# Datas
from datetime import datetime
agora = datetime.now()
print(f"Data: {agora:%d/%m/%Y}")
print(f"Hora: {agora:%H:%M:%S}")
2. Método format()
# Por posição
print("{} é uma linguagem {}".format("Python", "poderosa"))
# Por índice
print("{0} {1} {0}".format("Python", "é")) # Python é Python
# Por nome
print("{nome} tem {idade} anos".format(nome="Carlos", idade=30))
# Formatação
print("Preço: R$ {:.2f}".format(49.9)) # Preço: R$ 49.90
3. Operador % (Estilo antigo)
nome = "Bruno"
idade = 35
# Ainda funciona, mas não recomendado
print("Nome: %s, Idade: %d" % (nome, idade))
print("Preço: R$ %.2f" % 29.99)
✂️ Dividir e Juntar Strings
Split - Dividir
frase = "Python é uma linguagem incrível"
# Dividir por espaços
palavras = frase.split()
print(palavras) # ['Python', 'é', 'uma', 'linguagem', 'incrível']
# Dividir por delimitador
dados = "Ana,28,São Paulo"
info = dados.split(",")
print(info) # ['Ana', '28', 'São Paulo']
# Limitar divisões
texto = "a,b,c,d,e"
print(texto.split(",", 2)) # ['a', 'b', 'c,d,e']
# Dividir por linhas
multilinhas = """Linha 1
Linha 2
Linha 3"""
linhas = multilinhas.splitlines()
print(linhas) # ['Linha 1', 'Linha 2', 'Linha 3']
Join - Juntar
palavras = ["Python", "é", "incrível"]
# Juntar com espaço
frase = " ".join(palavras)
print(frase) # Python é incrível
# Juntar com vírgula
print(", ".join(palavras)) # Python, é, incrível
# Juntar com quebra de linha
print("\n".join(palavras))
# Sem separador
letras = ["P", "y", "t", "h", "o", "n"]
print("".join(letras)) # Python
🔄 Substituição e Modificação
texto = "Eu amo Java e Java é ótimo"
# Substituir primeira ocorrência
print(texto.replace("Java", "Python", 1)) # Eu amo Python e Java é ótimo
# Substituir todas
print(texto.replace("Java", "Python")) # Eu amo Python e Python é ótimo
# Várias substituições com dict e loop (útil com list comprehension que vimos no guia de list comprehension)
substituicoes = {"Java": "Python", "ótimo": "incrível"}
resultado = texto
for antigo, novo in substituicoes.items():
resultado = resultado.replace(antigo, novo)
print(resultado)
# Remover caracteres
numeros_texto = "123-456-789"
limpo = numeros_texto.replace("-", "")
print(limpo) # 123456789
✅ Validação de Strings
texto = "Python123"
# Tipos de caracteres
print(texto.isalnum()) # True (alfanumérico)
print(texto.isalpha()) # False (contém números)
print(texto.isdigit()) # False
print(texto.isnumeric()) # False
print(texto.isspace()) # False
# Exemplos
print("Python".isalpha()) # True
print("12345".isdigit()) # True
print(" ".isspace()) # True
print("python".islower()) # True
print("PYTHON".isupper()) # True
# Validação de identificadores
print("variavel_valida".isidentifier()) # True
print("123invalido".isidentifier()) # False
🎯 Projeto Prático: Validador de Senhas
Vamos criar um validador completo de senhas usando métodos de strings. Este exemplo também demonstra como usar funções de forma eficiente:
def validar_senha(senha):
"""
Valida força da senha com base em critérios de segurança.
Requisitos:
- Mínimo 8 caracteres
- Pelo menos 1 letra maiúscula
- Pelo menos 1 letra minúscula
- Pelo menos 1 número
- Pelo menos 1 caractere especial
"""
erros = []
# Verificar comprimento
if len(senha) < 8:
erros.append("❌ Senha deve ter no mínimo 8 caracteres")
# Verificar maiúscula
if not any(c.isupper() for c in senha):
erros.append("❌ Deve conter pelo menos 1 letra maiúscula")
# Verificar minúscula
if not any(c.islower() for c in senha):
erros.append("❌ Deve conter pelo menos 1 letra minúscula")
# Verificar número
if not any(c.isdigit() for c in senha):
erros.append("❌ Deve conter pelo menos 1 número")
# Verificar caractere especial
especiais = "!@#$%^&*()_+-=[]{}|;:,.<>?"
if not any(c in especiais for c in senha):
erros.append("❌ Deve conter pelo menos 1 caractere especial")
# Resultado
if erros:
return False, erros
else:
return True, ["✅ Senha forte! Todos os requisitos atendidos."]
# Testar senhas
senhas_teste = [
"fraca",
"MelhorSenha123",
"Sup3r$enh@!"
]
for senha in senhas_teste:
valida, mensagens = validar_senha(senha)
print(f"\n🔐 Senha: {'*' * len(senha)}")
for msg in mensagens:
print(f" {msg}")
# Sistema interativo
def sistema_cadastro():
print("="*50)
print("SISTEMA DE CADASTRO DE SENHA")
print("="*50)
while True:
senha = input("\nDigite sua senha (ou 'sair'): ")
if senha.lower() == 'sair':
print("Até logo!")
break
valida, mensagens = validar_senha(senha)
for msg in mensagens:
print(msg)
if valida:
confirmacao = input("Confirme sua senha: ")
if confirmacao == senha:
print("\n✅ Senha cadastrada com sucesso!")
break
else:
print("\n❌ Senhas não coincidem. Tente novamente.")
# Para usar: descomente
# sistema_cadastro()
🔤 Encoding e Unicode
Python 3 trabalha nativamente com Unicode, permitindo usar qualquer caractere:
# Caracteres especiais
texto = "Python 🐍 é incrível! 🚀"
print(texto)
# Acentos e caracteres especiais
mensagem = "Olá! Tudo bem? Açúcar, café ☕"
print(mensagem)
# Encoding/Decoding
texto_original = "Python é incrível"
# Converter para bytes
texto_bytes = texto_original.encode('utf-8')
print(texto_bytes) # b'Python \xc3\xa9 incr\xc3\xadvel'
# Converter de bytes para string
texto_recuperado = texto_bytes.decode('utf-8')
print(texto_recuperado) # Python é incrível
# Outros encodings
texto_latin = texto_original.encode('latin-1')
print(texto_latin)
🎨 String Templates
from string import Template
# Criar template
template = Template("Olá, $nome! Você tem $idade anos.")
# Substituir valores
resultado = template.substitute(nome="Carlos", idade=30)
print(resultado) # Olá, Carlos! Você tem 30 anos.
# Safe substitute (não gera erro se faltar variável)
template2 = Template("$titulo: $descricao")
resultado2 = template2.safe_substitute(titulo="Python")
print(resultado2) # Python: $descricao
💡 Trabalhando com Múltiplas Linhas
# String com múltiplas linhas
sql = """
SELECT nome, email, idade
FROM usuarios
WHERE ativo = true
ORDER BY nome
"""
# Texto formatado
relatorio = f"""
{'='*50}
RELATÓRIO DE VENDAS
{'='*50}
Total: R$ {1500.00:,.2f}
Mês: Janeiro/2025
Status: Aprovado
{'='*50}
"""
print(relatorio)
# Concatenação de linhas longas
mensagem = (
"Esta é uma mensagem muito longa "
"que precisa ser quebrada em múltiplas linhas "
"para melhorar a legibilidade do código"
)
print(mensagem)
🔗 Operações Comuns
# Concatenação
primeiro = "Python"
segundo = " é incrível"
completo = primeiro + segundo
# Repetição
print("=" * 50) # 50 sinais de igual
print("Python! " * 3) # Python! Python! Python!
# Reverter
texto = "Python"
invertido = texto[::-1]
print(invertido) # nohtyP
# Centralizar
titulo = "PYTHON"
print(titulo.center(30, "=")) # ============PYTHON============
# Verificar palíndromo
def eh_palindromo(texto):
limpo = texto.lower().replace(" ", "")
return limpo == limpo[::-1]
print(eh_palindromo("Ovo")) # True
print(eh_palindromo("A torre da derrota")) # True
print(eh_palindromo("Python")) # False
📊 Processamento de Texto Real
# Limpar e processar dados de entrada
def processar_nome_completo(nome):
"""Normaliza nome completo"""
# Remover espaços extras
limpo = " ".join(nome.split())
# Capitalizar corretamente
return limpo.title()
# Testar
nomes = [
" ana SILVA ",
"CARLOS de oliveira",
"maria santos"
]
for nome in nomes:
print(f"Original: '{nome}'")
print(f"Processado: '{processar_nome_completo(nome)}'")
print("-" * 40)
# Extrair informações
def extrair_dominio_email(email):
"""Extrai domínio de um e-mail"""
if "@" not in email:
return None
return email.split("@")[1]
# Testar
emails = [
"[email protected]",
"[email protected]",
"[email protected]"
]
for email in emails:
dominio = extrair_dominio_email(email)
print(f"{email} → {dominio}")
# Criar slug de URL
def criar_slug(titulo):
"""Converte título em slug amigável para URL"""
# Converter para minúsculas
slug = titulo.lower()
# Substituir espaços por hífens
slug = slug.replace(" ", "-")
# Remover caracteres especiais (simplificado)
permitidos = "abcdefghijklmnopqrstuvwxyz0123456789-"
slug = "".join(c for c in slug if c in permitidos)
# Remover hífens duplicados
while "--" in slug:
slug = slug.replace("--", "-")
return slug.strip("-")
# Testar
titulos = [
"Aprenda Python Hoje!",
"Guia de Django 2024",
"Como Criar APIs com FastAPI?"
]
for titulo in titulos:
print(f"{titulo} → {criar_slug(titulo)}")
💡 Boas Práticas com Strings
- Use f-strings: Mais legíveis e rápidas que outras formas
- Evite concatenação em loops: Use join() para melhor performance
- Normalize dados: strip(), lower() antes de comparações
- Valide entrada do usuário: Sempre verifique e sanitize
- Use métodos nativos: São otimizados em C e muito rápidos
- Prefira imutabilidade: Crie novas strings em vez de "modificar"
# ❌ RUIM - concatenação em loop
resultado = ""
for i in range(1000):
resultado += str(i) + "," # Cria nova string a cada iteração
# ✅ BOM - usar join
numeros = [str(i) for i in range(1000)]
resultado = ",".join(numeros) # Muito mais eficiente
🚀 Próximos Passos
Agora que você domina strings em Python, explore tópicos relacionados:
- List Comprehension - Processar listas de strings de forma eficiente
- Funções em Python - Criar funções de processamento de texto
- Dicionários - Organizar dados textuais estruturados
- Regex em Python - Padrões avançados de busca e validação
- Arquivos em Python - Ler e processar arquivos de texto
Quer se tornar um desenvolvedor Python completo? Confira nosso curso completo de Python do zero ao avançado com projetos práticos e certificado reconhecido!
📝 Resumo
Neste guia completo sobre strings em Python, você aprendeu:
- ✅ Conceitos fundamentais e criação de strings
- ✅ Indexação, fatiamento e operações básicas
- ✅ Métodos essenciais: upper, lower, strip, replace, split, join
- ✅ Formatação moderna com f-strings
- ✅ Validação e verificação de conteúdo
- ✅ Encoding e Unicode
- ✅ Projetos práticos: validador de senhas e processador de texto
- ✅ Boas práticas para código eficiente
Strings são fundamentais em qualquer programa Python. Dominar sua manipulação e formatação é essencial para processar dados, criar interfaces e construir aplicações profissionais!