Python: Fundamentos de Strings
Última atualização: 2026-09-22
O tipo de dado mais comum com que você vai trabalhar não são números — é texto. Nomes de usuário, emails, artigos, dados JSON, HTML... todas strings. Esta lição cobre sistematicamente as operações de string do Python.
1. Três Tipos de Aspas
Python permite três formas de definir strings:
# Aspas simples
s1 = 'Hello'
# Aspas duplas
s2 = "Hello"
# Aspas triplas (strings multilinha)
s3 = """Esta é a primeira linha
Esta é a segunda linha
Esta é a terceira linha"""
Aspas simples e duplas são equivalentes — escolha uma e mantenha consistência:
# Estas duas são equivalentes
name = 'João Silva'
name = "João Silva"
Mas se sua string contiver aspas, você precisará misturar:
# String tem aspas simples, envolva com aspas duplas
text = "It's a beautiful day"
print(text) # It's a beautiful day
# String tem aspas duplas, envolva com aspas simples
text = 'He said: "Hello!"'
print(text) # He said: "Hello!"
# Ou use um caractere de escape (não recomendado, prejudica legibilidade)
text = 'It\'s a beautiful day'
(1) Aspas Triplas: Ótimas para Texto Multilinha
Aspas triplas (""" ou ''') preservam quebras de linha e formatação:
# Texto multilinha com aspas triplas
message = """Prezado Cliente,
Obrigado por escolher nosso serviço. Seu pedido foi confirmado.
Previsão de entrega: 3 dias úteis.
Se tiver alguma dúvida, entre em contato com o suporte.
Tenha um ótimo dia!"""
print(message)
Saída:
Prezado Cliente,
Obrigado por escolher nosso serviço. Seu pedido foi confirmado.
Previsão de entrega: 3 dias úteis.
Se tiver alguma dúvida, entre em contato com o suporte.
Tenha um ótimo dia!
Aspas triplas são comumente usadas para: texto longo, strings de documentação e descrições de funções.
2. Caracteres de Escape
Alguns caracteres não podem ser escritos diretamente em uma string (como quebras de linha, tabulações ou as próprias aspas). Use caracteres de escape — uma barra invertida \ seguida de um caractere.
| Escape | Significado |
|---|---|
\n |
Nova linha |
\t |
Tabulação |
\\ |
Própria barra invertida |
\' |
Aspa simples |
\" |
Aspa dupla |
print("Primeira linha\nSegunda linha") # \n nova linha
print("Nome:\tJoão Silva\tIdade:\t25") # \t alinhamento com tab
print("C:\\Usuários\\João\\Desktop") # \\ exibe barra invertida
print("Ele disse: \"Olá!\"") # \" aspa dupla
Saída:
Primeira linha
Segunda linha
Nome: João Silva Idade: 25
C:\Usuários\João\Desktop
Ele disse: "Olá!"
▶ Exemplo: Formatando uma Tabela com Caracteres de Escape (Dificuldade ⭐)
▶ ExperimenteSaída:
Item Preço Qtd Total
------------------------
Maçã 5.0 3 15.0
Banana 3.5 5 17.5
Leite 12.0 2 24.0
\t é útil para alinhar texto, mas se os comprimentos do conteúdo variarem, o alinhamento pode não ser perfeito. Para produção, use formatação com f-string ({value:10} para ocupar 10 caracteres de largura).
3. Strings Brutas (Raw Strings)
Se você já escreveu caminhos de arquivo no Windows, já experimentou essa dor:
# Ops! \n é interpretado como nova linha
path = "C:\Users\new_folder\documents"
print(path)
# Saída: C:\Users
# ew_folder\documents
Solução: prefixe a string com r, informando ao Python "não processe caracteres de escape, exiba como está":
# ✅ String bruta — prefixo r
path = r"C:\Users\new_folder\documents"
print(path)
# Saída: C:\Users\new_folder\documents
Em uma string bruta, cada caractere é ele mesmo — \n não significa mais nova linha, \t não significa mais tabulação.
# Padrões regex (usaremos isso depois)
pattern = r"\d{3}-\d{8}" # Corresponder números de telefone: 010-12345678
# Caminhos de arquivo
log_path = r"D:\logs\app\2026\06\error.log"
print(f"Caminho do log: {log_path}")
r"abc\" dará erro. Por quê? Mesmo que \" não seja tratado como escape, o analisador vê a barra invertida como escapando a aspa de fechamento, causando uma string não terminada.
4. Indexação de Strings
Uma string é uma sequência de caracteres, cada um com uma posição (índice). Os índices do Python começam em 0:
text = "Python"
# Índice: 0→P 1→y 2→t 3→h 4→o 5→n
print(text[0]) # P
print(text[1]) # y
print(text[5]) # n
Python também suporta indexação negativa, contando da direita para a esquerda. -1 é o último caractere:
text = "Python"
print(text[-1]) # n (último)
print(text[-2]) # o (penúltimo)
print(text[-3]) # h
print(text[-6]) # P (primeiro)
(1) Diagrama de Índices
Positivo: 0 1 2 3 4 5
┌────┬────┬────┬────┬────┬────┐
│ P │ y │ t │ h │ o │ n │
└────┴────┴────┴────┴────┴────┘
Negativo: -6 -5 -4 -3 -2 -1
▶ Exemplo: Extrair Informação de um Número de Identidade (Dificuldade ⭐)
▶ ExperimenteSaída:
Código da região: 110101
Data de nascimento: 1990-01-01
Dígito verificador: 4
string[6:14] é chamado de fatiamento — abordaremos a seguir.
5. Fatiamento de Strings (Slicing)
Fatiamento extrai uma substring de uma string. Sintaxe: string[início:fim:passo]
text = "Hello, Python!"
# Fatiamento básico: início:fim (fim é exclusivo)
print(text[0:5]) # Hello (caracteres 0 a 4)
print(text[7:13]) # Python
(1) Atalhos
text = "Hello, Python!"
print(text[:5]) # Hello — omita início, do começo até o índice 5
print(text[7:]) # Python! — omita fim, do índice 7 até o fim
print(text[:]) # Hello, Python! — tudo
(2) Passo
text = "Hello, Python!"
print(text[::2]) # Hlo yhn! — a cada 2 caracteres
print(text[1::2]) # el,Pto — começa em 1, a cada 2
(3) Passo Negativo (Inversão)
text = "Hello, Python!"
print(text[::-1]) # !nohtyP ,olleH — inverte a string inteira!
print(text[5:0:-1]) # ,olle — do índice 5 ao 0, direção reversa
(1) ▶ Exemplos de Fatiamento
▶ ExperimenteSaída:
www.example.com
www.example
True
Hello
[::-1] é a forma clássica do Python para inverter uma string — simples e elegante. Observe que o fatiamento nunca levanta IndexError — mesmo se o início ou fim exceder o comprimento da string, Python retorna com segurança o que pode.
6. Métodos Comuns de String
Strings têm muitos métodos embutidos. Vamos cobrir os mais comuns aqui. Não precisa memorizar tudo — saber o que está disponível é suficiente; você memorizará com a prática.
(1) Conversão de Maiúsculas/Minúsculas
text = "Hello, Python!"
print(text.upper()) # HELLO, PYTHON!
print(text.lower()) # hello, python!
print(text.title()) # Hello, Python!
print(text.capitalize()) # Hello, python!
(2) Remoção de Espaços
text = " Hello, World! "
print(f"|{text}|") # | Hello, World! |
print(f"|{text.strip()}|") # |Hello, World!| — ambos os lados
print(f"|{text.lstrip()}|") # |Hello, World! | — apenas esquerda
print(f"|{text.rstrip()}|") # | Hello, World!| — apenas direita
(3) Busca e Substituição
text = "Hello, Python! Python is fun!"
print(text.find("Python")) # 7 — posição da primeira ocorrência
print(text.find("Java")) # -1 — não encontrado, retorna -1
print(text.count("Python")) # 2 — número de ocorrências
new_text = text.replace("Python", "Java")
print(new_text) # Hello, Java! Java is fun!
# replace pode especificar máximo de substituições
partial = text.replace("Python", "Java", 1)
print(partial) # Hello, Java! Python is fun!
(4) Métodos de Verificação
print("hello".isalpha()) # True — todas letras
print("hello123".isalpha()) # False — tem dígitos
print("12345".isdigit()) # True — todos dígitos
print("hello123".isalnum()) # True — letras e dígitos
print("hello!".isalnum()) # False — tem ponto de exclamação
print(" ".isspace()) # True — todos espaços
if user_input.isdigit(): garante que a conversão int() não falhará.
(5) Divisão e Junção
# split(): string → lista
sentence = "I love Python"
words = sentence.split()
print(words) # ['I', 'love', 'Python']
# Especifique o delimitador
csv_line = "João Silva,25,São Paulo"
fields = csv_line.split(",")
print(fields) # ['João Silva', '25', 'São Paulo']
# join(): lista → string
parts = ["2026", "06", "23"]
date = "-".join(parts)
print(date) # 2026-06-23
▶ Exemplo: Limpeza de Dados (Dificuldade ⭐⭐)
▶ ExperimenteSaída:
Passo 1: |João Silva , 25 , São Paulo|
Passo 2: ['João Silva ', ' 25 ', ' São Paulo']
Nome: João Silva
Idade: 25
Cidade: São Paulo
7. len(): Obtendo Comprimento de String
len() é uma função embutida do Python que retorna o comprimento de uma string (ou outras sequências):
text = "Hello, Python!"
print(len(text)) # 15
# Caracteres acentuados contam como 1 cada
acentuados = "Sãoé"
print(len(acentuados)) # 4
# String vazia tem comprimento 0
print(len("")) # 0
# Uso comum: limitar comprimento de entrada
username = "João Silva"
if len(username) < 2:
print("Nome de usuário muito curto")
elif len(username) > 10:
print("Nome de usuário muito longo")
else:
print(f"Nome de usuário '{username}' é válido")
len("ç") retorna 1, não 2. Isso torna as operações de string mais intuitivas.
8. Casos de Uso Comuns
- Limpeza de entrada: Use
strip()para remover espaços no início/fim,lower()para normalizar endereços de email. - Manipulação de caminhos de arquivo: Use
split()para extrair nomes de arquivo,replace()para converter separadores de caminho. - Análise de logs: Use
find()para localizar palavras-chave, fatiamento para extrair seções específicas de log. - Formatação de dados: Use
split()para analisar linhas CSV,join()para remontar saída. - Validação de senha: Use
isalnum(),isdigit(),isalpha()para verificar tipos de caracteres de senha. - Inversão de texto:
[::-1]para inversão rápida de string, útil para verificação de palíndromos ou codificação simples.
❓ Perguntas Frequentes
text[0:5] não inclui o índice 5?[início, fim). Dois benefícios: 1) text[:5] é fácil de lembrar (primeiros 5 caracteres); 2) text[0:5] e text[5:10] se conectam perfeitamente sem sobreposição ou lacunas. Você apreciará este design depois de se acostumar.find() retorna -1 quando não encontrado; index() levanta um erro (ValueError). Use find() por segurança no trabalho diário. Use index() quando tiver certeza de que a substring existe (por exemplo, extraindo de dados de formato fixo).📖 Resumo
- Strings têm três formas de aspas: simples, dupla, tripla; aspas duplas são recomendadas
- Caracteres de escape
\n,\t,\\, etc., representam caracteres especiais - Strings brutas
r"..."previnem escape de barra invertida, ótimas para caminhos e regex - Indexação começa em 0, suporta indexação negativa (
-1é o último caractere) - Fatiamento
[início:fim:passo]extrai substrings; fim é exclusivo; passo negativo inverte - Métodos comuns:
strip(),split(),join(),find(),replace() - Métodos de verificação:
isdigit(),isalpha(),isalnum(), etc., para validação de entrada - Strings são imutáveis — todas as "modificações" criam novas strings
📝 Exercícios
-
Básico (Dificuldade ⭐): Dado
s = "Python programming is fun!", faça o seguinte:- Extraia os primeiros 6 caracteres
- Extraia os últimos 4 caracteres
- Inverta a string inteira
- Converta todas as letras para maiúsculas
-
Intermediário (Dificuldade ⭐⭐): Escreva um validador de email. Dado
email = "user@example.com", verifique se:- Contém
@ - Há conteúdo em ambos os lados de
@(nenhum lado vazio) - Termina com
.com,.cnou.org - Exiba cada resultado de verificação (True/False) Dica: Use
find()para localizar@, fatiamento para verificar ambos os lados.
- Contém
-
Desafio (Dificuldade ⭐⭐⭐): Escreva um limpador de dados. Dado:
TEXT 📖 Somente leituradata = " João Silva, 25 , São Paulo ; Maria Souza , 30, Rio de Janeiro ; Pedro Santos , 22, Belo Horizonte "Divida por
;para obter os dados de cada pessoa, depois divida por,para obter cada campo. Usestrip()para limpar cada campo, depois exiba uma tabela alinhada:TEXT 📖 Somente leituraNome Idade Cidade ────────────────────────── João Silva 25 São Paulo Maria Souza 30 Rio de Janeiro Pedro Santos 22 Belo Horizonte