Python Strings: Um Guia Completo
Aprenda Python strings do zero: criação, indexação, fatiamento, f-strings, métodos integrados e armadilhas comuns com exemplos executáveis.
Strings são um dos tipos de dados mais utilizados em Python. Sempre que seu programa lê um arquivo, exibe uma mensagem ou analisa uma entrada, ele trabalha com strings. Este capítulo cobre como criar strings, indexá-las e fatiá-las, usar métodos integrados e evitar armadilhas comuns.
O que é uma String em Python?
Uma string é uma sequência ordenada e imutável de caracteres Unicode. "Imutável" significa que você nunca pode alterar um caractere no lugar — toda operação que parece modificar uma string na verdade cria uma nova. Strings podem conter letras, dígitos, pontuação, espaços em branco ou qualquer caractere Unicode (incluindo emojis).
greeting = "Hello, world!"
print(type(greeting)) # <class 'str'>
print(len(greeting)) # 13Criando Strings
Python aceita três estilos de aspas, todos equivalentes:
single = 'Python'
double = "Python"
triple = """Python""" # triple-double also works as '''Python'''Aspas simples e duplas
Use aquela que evita o escape do caractere de aspas dentro da string:
message1 = "It's a great day" # apostrophe is fine inside double quotes
message2 = 'She said "hello"' # double quote is fine inside single quotesStrings com aspas triplas (multilinha)
As aspas triplas permitem que uma string abranja várias linhas sem nenhuma sequência de escape:
poem = """Roses are red,
Violets are blue,
Python is awesome,
And so are you."""
print(poem)Saída:
Roses are red,
Violets are blue,
Python is awesome,
And so are you.Strings com aspas triplas também são a forma convencional de escrever docstrings — os blocos de documentação que aparecem no início de funções, classes e módulos.
Convertendo outros tipos para strings
Use a função integrada str() para converter qualquer objeto em sua representação como string:
num = 42
pi = 3.14
flag = True
print(str(num)) # '42'
print(str(pi)) # '3.14'
print(str(flag)) # 'True'Indexando Caracteres
Python usa indexação baseada em zero: o primeiro caractere está no índice 0. Você também pode usar índices negativos — -1 refere-se ao último caractere, -2 ao penúltimo, e assim por diante.
Acessar um índice fora do intervalo válido gera um IndexError.
Fatiando Strings
Um slice extrai uma parte de uma string usando a sintaxe s[start:stop:step].
| Parte | Significado | Padrão |
|---|---|---|
start | Índice do primeiro caractere a incluir | 0 |
stop | Índice do primeiro caractere a excluir | len(s) |
step | Quantos caracteres avançar a cada vez | 1 |
s = "Hello, World!"
print(s[0:5]) # Hello — characters at indexes 0–4
print(s[7:]) # World! — from index 7 to the end
print(s[:5]) # Hello — from the start to index 4
print(s[-6:]) # World! — last 6 characters
print(s[::2]) # Hlo ol! — every other character
print(s[::-1]) # !dlroW ,olleH — reversed stringPara uma análise mais detalhada da sintaxe de fatiamento, veja o capítulo Slicing Strings.
Concatenação e Repetição de Strings
O operador + une duas strings; o operador * repete uma string um determinado número de vezes.
Para concatenação em grande escala dentro de um loop, use str.join() em vez de + — é significativamente mais rápido porque evita a criação de objetos string intermediários:
words = ["one", "two", "three"]
result = ", ".join(words)
print(result) # one, two, threeRepetição de Strings
Os Operadores in e not in
Verifique se uma substring existe dentro de uma string com in ou not in:
text = "The quick brown fox"
print("quick" in text) # True
print("slow" in text) # False
print("slow" not in text) # TrueComprimento de uma String
len() retorna o número de caracteres em uma string:
s = "Python"
print(len(s)) # 6
empty = ""
print(len(empty)) # 0Caracteres de Escape
Alguns caracteres não podem ser digitados literalmente dentro de uma string. Python usa uma barra invertida \ para introduzir sequências de escape:
| Sequência | Caractere |
|---|---|
\n | Nova linha |
\t | Tabulação |
\\ | Barra invertida literal |
\' | Aspas simples |
\" | Aspas duplas |
\r | Retorno de carro |
print("Line one\nLine two")
# Line one
# Line two
print("Name:\tAlice")
# Name: Alice
path = "C:\\Users\\Alice"
print(path) # C:\Users\AlicePara desativar completamente o processamento de escape, prefixe a string com r para criar uma raw string — útil para expressões regulares e caminhos no Windows:
pattern = r"\d+\.\d+" # treated literally, no escaping needed
print(pattern) # \d+\.\d+Veja o capítulo Escape Characters para a lista completa.
Formatação de Strings
Python oferece várias formas de incorporar valores de variáveis dentro de strings.
f-strings (recomendado — Python 3.6+)
Uma f-string é prefixada com f ou F. Expressões dentro de {} são avaliadas em tempo de execução:
name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")
# My name is Alice and I am 30 years old.
# Expressions work too
print(f"Next year I'll be {age + 1}.") # Next year I'll be 31.Método str.format()
Formatação com percentual (%) (legado)
Código Python mais antigo usa a formatação com %. Você ainda vai encontrá-la, mas as f-strings são a preferência moderna:
print("Hello, %s!" % "Dave") # Hello, Dave!
print("Pi ≈ %.2f" % 3.14159) # Pi ≈ 3.14Para uma análise completa das opções de formatação, veja os capítulos String Formatting e f-Strings.
Métodos Comuns de String
O tipo str do Python vem com dezenas de métodos integrados. Os mais utilizados estão mostrados abaixo.
Conversão de maiúsculas/minúsculas
s = "Hello, World!"
print(s.upper()) # HELLO, WORLD!
print(s.lower()) # hello, world!
print(s.capitalize()) # Hello, world!
print(s.title()) # Hello, World!
print(s.swapcase()) # hELLO, wORLD!Busca e contagem
s = "hello, world"
print(s.find("o")) # 4 — index of first 'o', or -1 if not found
print(s.rfind("o")) # 8 — index of last 'o'
print(s.count("l")) # 3 — total occurrences of 'l'
print(s.startswith("he")) # True
print(s.endswith("ld")) # TrueSubstituindo substrings
s = "I like cats. Cats are great."
print(s.replace("cats", "dogs"))
# I like dogs. Cats are great. (only lowercase 'cats' replaced)
print(s.replace("cats", "dogs").replace("Cats", "Dogs"))
# I like dogs. Dogs are great.Removendo espaços em branco
padded = " hello "
print(padded.strip()) # 'hello' — both ends
print(padded.lstrip()) # 'hello ' — left end only
print(padded.rstrip()) # ' hello' — right end onlyDividindo e unindo
csv = "apple,banana,cherry"
items = csv.split(",")
print(items) # ['apple', 'banana', 'cherry']
print(" | ".join(items)) # apple | banana | cherryVerificando o conteúdo da string
Para a referência completa, veja o capítulo String Methods.
Imutabilidade de Strings — Uma Armadilha Comum
Strings não podem ser alteradas no lugar. Tentar atribuir a um índice gera um TypeError:
s = "hello"
# s[0] = "H" # TypeError: 'str' object does not support item assignmentPara alterar parte de uma string, construa uma nova:
s = "hello"
s = "H" + s[1:] # slice off everything after index 0 and prepend "H"
print(s) # HelloO nome da variável s agora aponta para um objeto string diferente — o "hello" original permanece inalterado (e será coletado pelo garbage collector se nada mais o referenciar).
Strings vs. bytes
Uma string Python (str) armazena texto Unicode. Quando você precisa de dados binários brutos — por exemplo, para escrever em um arquivo no modo binário ou enviar dados pela rede — use bytes em vez disso:
b = b"hello" # bytes literal
s = b.decode("utf-8") # bytes → str
b2 = s.encode("utf-8") # str → bytes
print(type(b)) # <class 'bytes'>
print(type(s)) # <class 'str'>