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 que você coloca entre aspas. Aspas simples ou duplas, ambas funcionam da mesma forma.
greeting = "Hello, world"
username = 'alice'A única vez em que o tipo de aspas importa é quando seu texto contém marcas de aspas. Use o estilo oposto para não precisar escapar essas marcas:
note = "It's a great day" # apóstrofo dentro do texto, use aspas duplas
message = 'She said "hello"' # aspas duplas dentro do texto, use aspas simples
escaped = "She said \"hello\"" # ou escape com uma barra invertidaImutabilidade
Strings são imutáveis: depois que você cria uma, não é possível alterá-la. Pense em uma string como algo permanentemente fixo desde o momento em que é criada. Qualquer operação que pareça estar modificando uma string, na verdade, está produzindo uma string totalmente nova. A original permanece exatamente como estava.
name = "alice"
name = name.upper() # "ALICE" é uma nova string; "alice" continua inalteradaA consequência direta: você não pode alterar um caractere em uma posição específica. Python levantará 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 slicing ou um método. Ambos são abordados a seguir.
name[0] = "A" não funciona, isso levanta um TypeError. Indexação e slicing
Cada caractere em uma string tem uma posição numerada, começando em 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 caractere)-1 é sempre o último caractere, -2 o penúltimo, e assim por diante. Eles são úteis quando você quer o final de uma string sem saber seu tamanho exato.
Slicing extrai um trecho. [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 final)
print(word[:3]) # "Pyt" (do início até a posição 2)
print(word[:]) # "Python" (uma cópia da string toda)
print(word[::2]) # "Pto" (a cada dois caracteres)
print(word[::-1]) # "nohtyP" (invertida)Três padrões que você usará mais: 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 é uma forma idiomática de escrever em Python e você verá isso com frequência.
word[0] é o primeiro caractere e word[-1] é o último. Um slice pega um intervalo: word[start:stop] mantém start e para logo antes de stop. word[::-1] inverte a string, o que parece estranho na primeira vez e depois você usa para sempre. 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 guarda), depois um ponto, depois o nome do método. Cada método retorna uma nova string. A original nunca é alterada.
Maiúsculas e minúsculas
text = "Hello, World"
text.lower() # "hello, world"
text.upper() # "HELLO, WORLD"
text.title() # "Hello, World" (cada palavra com inicial maiúscula)
text.capitalize() # "Hello, world" (apenas a primeira palavra)lower() e upper() são os dois que você usará mais. lower() é particularmente útil ao comparar textos: "Alice" e "alice" se tornam a mesma coisa depois que você chama .lower() nos dois lados.
Espaços em branco
text = " hello "
text.strip() # "hello" (dos dois lados)
text.lstrip() # "hello " (apenas à esquerda)
text.rstrip() # " hello" (apenas à direita)strip() remove espaços das duas extremidades de uma string. Você o usará quase sempre que lidar com entrada de usuário ou texto de um arquivo, porque espaços perdidos causam falhas silenciosas: "alice" != "alice ".
Buscando texto
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 ele não estiver lá, retorna -1. Use startswith() e endswith() quando você só se importa se a string começa ou termina com algo específico.
Substituindo
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 toda ocorrência de um trecho de texto por outro e devolve uma nova string. A original não é alterada. Passe um terceiro argumento se você quiser substituir apenas a primeira ocorrência.
Dividindo e juntando
split() corta uma string em pedaços em um separador e retorna esses pedaços como uma lista. Você diz a ele onde cortar:
csv_row = "Alice,28,Brasília"
parts = csv_row.split(",") # ["Alice", "28", "Brasília"]
" hello world ".split() # ["hello", "world"]split() retorna uma lista, uma sequência ordenada de valores. Elas têm seu próprio capítulo, Listas; por ora, trate-as como a sequência de partes que split() produz e join() consome.
join() faz o inverso: ele 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: separador.join(lista_de_strings). O separador fica à esquerda, a lista à direita. " ".join(words) coloca um espaço entre cada palavra. "".join(words) cola tudo sem nada entre os elementos.
.lower() e .upper() para caixa, .strip() para remover espaços perdidos, .find() para localizar texto (retorna -1 quando não encontra), .replace() para trocar texto, e .split() com sep.join() para desmontar uma string e remontá-la. f-strings
f-strings embutem valores diretamente dentro de um texto. Coloque f antes da aspa de abertura, depois envolva qualquer variável ou expressão em chaves. Python preenche o valor quando o código é executado. Você também pode adicionar dois pontos depois do valor para controlar como ele é exibido.
name = "Alice"
score = 94.5
print(f"Hello, {name}!") # "Hello, Alice!"
print(f"Score: {score:.1f}%") # "Score: 94.5%"
print(f"2 + 2 = {2 + 2}") # "2 + 2 = 4"
print(f"Name: {name.upper()}") # "Name: ALICE"A especificação de formato depois de : controla como o valor é exibido:
| Especificação | 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 | alinha à direita em 10 caracteres | f"{'hi':>10}" → " hi" |
Você usará .2f mais: sempre que exibir um decimal e quiser um número organizado em vez de uma longa sequência de dígitos. Tudo o mais na tabela está ali para quando você precisar. Você pode colocar qualquer variável, operação aritmética ou chamada de método dentro de {}.
f antes da aspa de abertura, depois envolva qualquer variável, soma ou chamada de método em {} e Python coloca o resultado ali quando a linha é executada. Dois pontos dentro das chaves controlam a aparência: :.2f para duas casas decimais é o que você vai usar com frequência. Muito mais organizado do que colar texto com +. Strings de múltiplas linhas
Para escrever uma string que ocupa mais de uma linha, use aspas triplas: três " no início e três no final. Python preserva todas as quebras de linha e espaçamentos exatamente como você os escreveu.
message = """
Dear Alice,
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. Python usa sequências de escape: uma barra invertida seguida de uma letra que representa algo. As duas que você usará constantemente são \n para uma nova linha e \t para uma tabulação.
| Sequência | Caractere |
|---|---|
\n | Nova linha |
\t | Tabulação |
\\ | Barra invertida literal |
\" | Aspas duplas |
\' | Aspas simples |
print("Line one\nLine two") # duas linhas de saída
print("Name:\tAlice") # Name: Alice
path = r"C:\Users\Alice\Documents" # string bruta, sem processamento de escape\n começa uma nova linha, \t insere uma tabulação, \\ é uma barra invertida de verdade. Essas duas, \n e \t, são as que você vai realmente digitar. Coloque um r antes da aspa e as barras invertidas voltam a ser simples, útil para caminhos do Windows. Verificando o conteúdo de uma string
Python tem métodos que respondem a perguntas de sim/não sobre o que uma string contém. Eles retornam True ou False. O mais útil no começo: isdigit() permite verificar se uma string é composta só por números antes de convertê-la, para você evitar uma quebra em uma entrada inesperada.
"42".isdigit() # True
"hello".isalpha() # True
"hello42".isalnum() # True
" ".isspace() # True
"Hello".islower() # False
"HELLO".isupper() # Trueis* respondem perguntas de sim ou não e retornam True só quando todo caractere se encaixa. O que você vai usar primeiro: chame isdigit() antes de int() para garantir que o texto realmente é um número, assim uma entrada estranha não quebra seu programa. Na prática
Remova espaços em branco, normalize a caixa e depois extraia o que você precisa. Essa 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}") # "alice"
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() | Coloca em maiúscula cada palavra / apenas a primeira |
.strip() / .lstrip() / .rstrip() | Remove espaços em branco ao redor |
.find(sub) | Índice da primeira correspondência, ou -1 |
.count(sub) | Quantas vezes sub aparece |
.startswith(s) / .endswith(s) | Verificação de 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ções de tipo de caractere |

