Strings
Texto aparece em quase todo programa que você escreve. Nomes, mensagens, pontuações, rótulos. Em Python, qualquer trecho de texto é chamado de string: qualquer valor envolvido por aspas. Simples ou duplas, ambas funcionam da mesma forma.
greeting = "Hello, world"
username = 'alice'A única vez em que a escolha das aspas importa é quando seu texto contém aspas. Use o estilo oposto para não precisar escapá-las:
note = "It's a great day" # apóstrofo dentro, use aspas duplas
message = 'She said "hello"' # aspas duplas dentro, use aspas simples
escaped = "She said \"hello\"" # ou escape com uma barra invertidaImutabilidade
Strings são imutáveis: depois de criada, você não pode alterá-la. Pense em uma string como permanentemente fixa no momento em que é feita. Qualquer operação que pareça modificá-la, na verdade, produz uma nova. A original permanece exatamente como estava.
name = "alice"
name = name.upper() # "ALICE" é uma nova string; "alice" permanece inalteradaA consequência direta: você não pode alterar um caractere em uma posição específica. Python vai gerar um erro se você tentar.
name = "alice"
name[0] = "A" # TypeError: 'str' object does not support item assignmentPara obter uma string modificada, construa uma nova usando fatiamento ou um método. Ambos são abordados abaixo.
Indexação e fatiamento
Cada caractere em uma string tem uma posição numerada, começando do zero. Você pode ler caracteres individuais colocando esse número de posição entre colchetes. Números negativos contam de trás para frente, a partir do final.
word = "Python"
# 012345
print(word[0]) # "P"
print(word[2]) # "t"
print(word[5]) # "n"
print(word[-1]) # "n" (último caractere)
print(word[-2]) # "o" (penúltimo)-1 é sempre o último caractere, -2 o penúltimo, e assim por diante. São úteis quando você quer o final de uma string sem saber o tamanho exato.
Fatiamento extrai um pedaço. [start:stop] inclui start e exclui stop:
word = "Python"
print(word[0:2]) # "Py" (posições 0 e 1)
print(word[2:]) # "thon" (posição 2 até o fim)
print(word[:3]) # "Pyt" (início até a posição 2)
print(word[:]) # "Python" (uma cópia da string inteira)
print(word[::2]) # "Pto" (cada segundo caractere)
print(word[::-1]) # "nohtyP" (invertida)Três padrões para ter em mente: word[:n] para os primeiros n caracteres, word[n:] para tudo a partir da posição n, word[-n:] para os últimos n caracteres. word[::-1] inverte uma string. Parece estranho da primeira vez, mas é Python idiomático e você vai vê-lo com frequência.
Métodos essenciais de string
Strings vêm com um conjunto de métodos embutidos: operações que você chama diretamente em qualquer valor de string. Você escreve a string (ou a variável que a contém), depois um ponto, depois o nome do método. Cada método retorna uma nova string. A original nunca é alterada.
Caixa
text = "Hello, World"
text.lower() # "hello, world"
text.upper() # "HELLO, WORLD"
text.title() # "Hello, World" (cada palavra em maiúscula)
text.capitalize() # "Hello, world" (apenas a primeira palavra)lower() e upper() são os dois que você mais vai usar. lower() é particularmente útil ao comparar textos: "Alice" e "alice" se tornam a mesma coisa depois de chamar .lower() em ambos os lados.
Espaços em branco
text = " hello "
text.strip() # "hello" (ambos os lados)
text.lstrip() # "hello " (apenas à esquerda)
text.rstrip() # " hello" (apenas à direita)strip() remove espaços de ambas as pontas de uma string. Você vai usá-lo praticamente toda vez que lidar com entrada do usuário ou texto vindo de um arquivo, porque espaços perdidos causam falhas silenciosas: "alice" != "alice ".
Busca
text = "Hello, world"
text.find("world") # 7
text.find("Python") # -1 (não encontrado)
text.count("l") # 3
text.startswith("Hello") # True
text.endswith("world") # Truefind() retorna a posição onde um trecho de texto começa dentro da sua string. Se não estiver lá, retorna -1. Use startswith() e endswith() quando você só se importar se a string começa ou termina com algo específico.
Substituição
text = "Hello, world"
text.replace("world", "Python") # "Hello, Python"
text.replace("l", "L") # "HeLLo, worLd" (todas as ocorrências)
text.replace("l", "L", 1) # "HeLlo, world" (apenas a primeira)replace() troca cada ocorrência de um trecho por outro e te devolve uma nova string. A original não é alterada. Passe um terceiro argumento se quiser substituir apenas a primeira ocorrência.
Divisão e junção
split() corta uma string em pedaços em um separador e os retorna como uma lista. Você diz onde cortar:
csv_row = "Bruno,28,Brasília"
parts = csv_row.split(",") # ["Bruno", "28", "Brasília"]
" hello world ".split() # ["hello", "world"]O que é uma lista?
Uma lista é uma coleção ordenada de valores. ["Bruno", "28", "Brasília"] acima é uma. Listas terão seu próprio capítulo; por enquanto, trate-as como uma sequência de itens que split() produz e join() consome.
join() faz o inverso: combina uma lista de strings em uma só. A string antes de .join() é colocada entre cada item:
words = ["Hello", "world"]
" ".join(words) # "Hello world"
", ".join(words) # "Hello, world"
"".join(words) # "Helloworld"O padrão a lembrar: separator.join(list_of_strings). O separador vai à esquerda, a lista à direita. " ".join(words) coloca um espaço entre cada palavra. "".join(words) cola as palavras sem nada entre elas.
f-strings
f-strings embutem valores diretamente dentro do texto. Coloque f antes das aspas de abertura, depois envolva qualquer variável ou expressão em chaves. O Python preenche tudo quando o código é executado. Você também pode adicionar dois pontos após o valor para controlar como ele é exibido.
name = "Bruno"
score = 94.5
print(f"Hello, {name}!") # "Hello, Bruno!"
print(f"Score: {score:.1f}%") # "Score: 94.5%"
print(f"2 + 2 = {2 + 2}") # "2 + 2 = 4"
print(f"Name: {name.upper()}") # "Name: BRUNO"A especificação de formato após : controla como o valor é exibido:
| Spec | Significado | Exemplo |
|---|---|---|
.2f | 2 casas decimais | f"{3.14159:.2f}" → "3.14" |
.0% | porcentagem, sem decimais | f"{0.94:.0%}" → "94%" |
, | separador de milhares | f"{1000000:,}" → "1,000,000" |
>10 | alinhar à direita em 10 chars | f"{'hi':>10}" → " hi" |
Você vai usar .2f mais vezes: sempre que exibir um decimal e quiser um número arrumado em vez de uma longa sequência de dígitos. Todo o resto na tabela está lá para quando você precisar. Você pode colocar qualquer variável, aritmética ou chamada de método dentro do {}.
Strings multilinha
Para escrever uma string que abrange mais de uma linha, use aspas triplas: três " no início e três no fim. O Python preserva todas as quebras de linha e o espaçamento exatamente como você escreveu.
message = """
Dear Bruno,
Thank you for your order.
Best regards,
The Team
"""Sequências de escape
Alguns caracteres são difíceis de digitar diretamente dentro de uma string. O Python usa sequências de escape: uma barra invertida seguida por uma letra que representa outra coisa. As duas que você vai usar o tempo todo são \n para uma nova linha e \t para tabulação.
| Sequência | Caractere |
|---|---|
\n | Nova linha |
\t | Tab |
\\ | Barra invertida literal |
\" | Aspas duplas |
\' | Aspas simples |
print("Line one\nLine two") # duas linhas de saída
print("Name:\tBruno") # Name: Bruno
path = r"C:\Users\Bruno\Documents" # string raw, sem processamento de escapeVerificando o conteúdo de strings
O Python tem métodos que respondem perguntas de sim/não sobre o que uma string contém. Eles retornam True ou False. O mais útil no início: isdigit() te permite verificar se uma string é só números antes de convertê-la, para que você evite uma falha em caso de entrada inesperada.
"42".isdigit() # True
"hello".isalpha() # True
"hello42".isalnum() # True
" ".isspace() # True
"Hello".islower() # False
"HELLO".isupper() # TrueNa prática
Remova os espaços em branco, normalize a caixa, e então extraia o que você precisa. Esta sequência lida com quase qualquer texto fornecido pelo usuário:
raw_input = " [email protected] "
email = raw_input.strip().lower() # "[email protected]"
at_pos = email.find("@")
username = email[:at_pos]
domain = email[at_pos + 1:]
print(f"User: {username}") # "bruno"
print(f"Domain: {domain}") # "example.com"Referência de métodos
| Método | O que faz |
|---|---|
.lower() / .upper() | Converte para tudo minúsculo / tudo maiúsculo |
.title() / .capitalize() | Capitaliza cada palavra / apenas a primeira |
.strip() / .lstrip() / .rstrip() | Remove espaços em branco circundantes |
.find(sub) | Índice da primeira ocorrência, ou -1 |
.count(sub) | Quantas vezes sub aparece |
.startswith(s) / .endswith(s) | Verifica prefixo / sufixo |
.replace(old, new) | Substitui ocorrências |
.split(sep) | Divide em uma lista |
sep.join(iterable) | Junta itens em uma string |
.isdigit() / .isalpha() / .isalnum() | Verifica o tipo dos caracteres |

