Curso de Python / Strings: índices, fatias, métodos e formatação

Uma string é um valor de texto ordenado que permite ler posições e intervalos por indexação e fatiamento. Strings são imutáveis: métodos como strip() e replace() retornam um resultado, em vez de alterar a string original.

Entenda os índices e os limites de uma fatia

O primeiro índice é 0, e o índice negativo -1 indica o último elemento. Em text[start:stop], a posição start é incluída e a posição stop não é. Salve e execute este pequeno exemplo para observar essas três formas de acesso:

text = "Python"
print(text[0], text[-1], text[1:4])

A saída é P n yth. A fatia text[1:4] contém os elementos dos índices 1, 2 e 3. Um índice individual fora do intervalo, como text[99], provoca IndexError; uma fatia como text[1:99] retorna a parte disponível, ython.

Conforme a referência do tipo str, o texto é uma sequência de pontos de código Unicode. len() não conta bytes nem necessariamente os caracteres visuais percebidos pelo leitor. Um acento combinado ou um emoji pode envolver vários pontos de código. Por exemplo, "á" e "a\u0301" podem ter uma aparência semelhante, embora seus comprimentos sejam diferentes.

Limpe e apresente um valor de entrada completo

Salve o código abaixo em UTF-8 como strings.py, na pasta do projeto, e execute python strings.py no ambiente selecionado. No macOS ou Ubuntu, fora de um ambiente virtual, o comando pode ser python3 strings.py. Não são necessários pacotes extras nem arquivos de entrada: o dado deste exercício já está na variável raw.

raw = "  lunch,8000  "
clean = raw.strip()
name, amount_text = clean.split(",")
amount = int(amount_text)
print(clean)
print(name.upper())
print(f"{name}: {amount:,} KRW")
print("-".join(["2026", "10", "17"]))

A saída esperada é:

lunch,8000
LUNCH
lunch: 8,000 KRW
2026-10-17

raw contém o texto com espaços ao redor. clean recebe o resultado de strip(), e split(",") produz os dois campos que serão atribuídos a name e amount_text. Somente depois de int() o valor é um inteiro. O nome lunch e a unidade KRW permanecem nos dados do exemplo; não há tradução automática nem conversão de moeda.

upper() produz a versão em maiúsculas usada na segunda linha. Ele não muda name, por isso a terceira linha ainda mostra lunch. A última instrução liga três strings com hífens para formar 2026-10-17; ela demonstra a junção de texto, não uma validação de data.

Escolha entre dividir, juntar e interpretar um formato

split() divide uma string em uma lista, e join() reúne strings usando um separador. Cada item passado a join() deve ser uma string. Se você tiver números, converta-os conscientemente antes de juntar, em vez de presumir que o método converterá qualquer objeto.

O exemplo espera exatamente uma vírgula entre dois campos. Ele não é um leitor CSV geral. Um nome entre aspas que contenha uma vírgula será dividido mesmo assim, e um campo com quebra de linha também exige tratamento próprio. Para arquivos CSV, use o módulo csv, que entende os delimitadores e as regras de aspas do formato.

Uma f-string é adequada para construir uma mensagem legível, como a saída deste programa. Para valores em consultas SQL, passe os parâmetros pela API do driver de banco de dados; não insira a entrada externa no comando com uma f-string. A explicação de vinculação de parâmetros em sqlite3 mostra essa distinção para SQLite. A sintaxe dos marcadores varia conforme o driver.

Dividir texto não valida automaticamente o significado dos campos. Mesmo que existam dois campos e a conversão numérica funcione, ainda pode haver um nome vazio ou um valor negativo. Defina essas regras de dados separadamente, assim como na aula sobre entrada e conversão de uma despesa.

Preserve o original e confira os casos de erro

Chamar raw.strip() e ignorar o retorno deixa raw intacta. replace() também retorna uma string com o resultado. Para manter as duas versões, use nomes diferentes, como raw e clean. Para passar a usar apenas a versão tratada, atribua explicitamente o resultado ao nome desejado.

  1. Acrescente espaços nas extremidades do valor de raw. Execute o programa e confira se clean e as quatro linhas de saída permanecem iguais.
  2. Remova a vírgula de lunch,8000. A atribuição a duas variáveis provoca ValueError, porque a divisão não produz dois campos. Restaure a vírgula antes de continuar.
  3. No pequeno exemplo com text = "Python", tente executar text[0] = "p". Observe TypeError, pois uma posição da string não pode ser alterada diretamente. Remova essa tentativa e execute novamente o exemplo original.

Uma vírgula extra também pode produzir campos demais para as duas variáveis. Confira a quantidade de campos, o formato do valor e as regras do cadastro como verificações distintas. Ao corrigir o dado de teste, restaure o programa original e confirme novamente a saída antes de mudar outra coisa.