Rapidinha: strings em Python

Publicado em 2013-03-14 por Vinicius Assef

Um resumo sobre strings em Python para quem já sabe programar. Direto ao ponto!

A série Rapidinha é feita de posts que mostram a praticidade de Python para quem já sabe programar em outra linguagem e não precisa de muitas explicações para entender o funcionamento.

Então, show me the code!

Importante: todos os exemplos consideram Python 3.

Aspas

Aspas simples e aspas duplas são tratadas exatamente da mesma forma em Python. Não há nenhuma diferença entre elas.

Quando uma string for grande e se extender por mais de uma linha, podemos usar a sintaxe de 3 aspas (''' ou """). As 3 aspas também podem ser usadas para inserir uma aspa na string. Exemplos abaixo:

>>> print ("a b")
a b

>>> print ('a b')
a b

>>> print ("a\nb")
a
b

>>> print (r"a\nb")
a\nb

>>> print (r"""a\nb""")
a\nb


>>> # uma aspa dupla dentro da string:
>>> print ("""aaa " bbb""")
aaa " bbb

Preenchido ou vazio?

Vazio é False, preenchido é True:

>>> bool("")
False

>>> bool("x")
True

Mesmo conceito de True e False:

>>> s = "abcd"
>>> if s:
...   print ("tem conteudo")
...
tem conteudo

>>> s = ""
>>> if not s:
...   print ("vazio")
...
vazio

Adição e multiplicação de strings

>>> var = "b"
>>> "a" + var + "c"
abc

>>> "x" * 4
xxxx

Interpolação de strings

O jeito mais antigo, com %, que quase ninguém usa mais:

>>> nome = "Vinicius"
>>> profissao = "programador"
>>> "eu sou %s" % profissao
eu sou programador

>>> "nome: %s - profissao: %s" % (nome, profissao)
nome: Vinicius - profissao: programador

>>> "nome: %(x)s - profissao: %(y)s" % ({"x": nome, "y": profissao})
nome: Vinicius - profissao: programador

Com .format():

>>> nome = "Vinicius"
>>> profissao = "programador"
>>> "eu: {} - prof: {}".format(nome, profissao)
eu: vinicius - prof: programador".format(nome, profissao)

>>> "nome: {x} - profissao: {y}".format(x=nome, y=profissao)
nome: Vinicius - profissao: programador

>>> "prof: {1} - quem: {0}".format(nome, profissao)
prof: programador - quem: vinicius

>>> class X:
...     pass
...
>>> x = X()
>>> x.cor = "azul"
>>> x.dia = "sabado"
>>> "{.dia} {.cor}".format(x)
'sabado azul'

>>> produto = {"descricao": "telefone", "data": "2018-03-18"}
>>> cliente = {"nome": "Antonio", "categoria": "vip"}
>>> "{p[descricao]} - {c[nome]}".format(p=produto, c=cliente)
'telefone - Antonio'

Leia mais sobre como formatar strings em Python usando str.format() e Format String Syntax.

O Python 3.6 trouxe uma nova sintaxe para formatação de strings, as f-strings:

>>> profissao = "programador"
>>> f"eu sou {profissao}"
eu sou programador
>>> f"eu sou {profissao.upper()}"
eu sou PROGRAMADOR

Leia mais sobre formatação de strings com f-strings.

Inspecionando conteúdo

>>> len("abcd")
4

>>> "abcd".startswith("a")
True
>>> "abcd".startswith("b")
False

>>> "abcd".endswith("d")
True

>>> "bc" in "abcd"
True
>>> "xx" in "abcd"
False

>>> "abcd".find("a")
0
>>> "abcd".find("c")
2
>>> "abcd".find("x")
-1

>>> "abcd".index("c")
2
>>> "abcd".index("x")
...
ValueError: substring not found

Slicing (fatiamento)

>>> "abcd"[0]
a
>>> "abcd"[0:2] # nao inclui o indice final
ab
>>> "abcd"[-1]
d
>>> "abcd"[-2]
c
>>> "abcd"[::-1]
dcba

Transformando

Importante: Os métodos de string nunca modificam o conteúdo original.

>>> s = "eu gosto de python"
>>> s.title()
Eu Gosto De Python

>>> s.capitalize()
Eu gosto de python

>>> s == s.capitalize()
False

>>> 'ABCD'.lower()
abcd
>>> 'abcd'.upper()
ABCD
>>> 'AbcD'.swapcase()
aBCd

>>> "abcd".replace("c", "*")
ab*d
>>> "--" + "   abcd   ".strip() + "--"
--abcd--
>>> "--" + "   abcd   ".lstrip() + "--"
--abcd   --
>>> "--" + "   abcd   ".rstrip() + "--"
--   abcd--
>>> "12".zfill(5)
00012

Listas e strings

De lista para string:

>>> letras = ["a", "e", "i", "o", "u"]
>>> "-".join(letras)
a-e-i-o-u

>>> "".join(vogais)
aeiou

>>> ",".join(["maria", "pedro", "joao"])
"maria,pedro,joao"

De string para lista:

>>> "cada palavra separada".split()
["cada", "palavra", "separada"]

>>> "so 2 pedacos".split(None, 1)
["so, "2 pedacos"]

>>> "a,b,c".split(",")
["a", "b", "c"]

Iterando uma string

>>> for letra in "abc":
...     print(letra)
a
b
c

Strings são imutáveis

Ao mudar o conteúdo, muda o id() da variável:

>>> a = "xxx"
>>> id(a)
9276928
>>> a = "yyy"
>>> id(a)
140254837313240

Leia mais sobre Como as variáveis funcionam em Python.

É impossível modificar uma posição da string:

>>> letras = "abc"
>>> letras[0] = "x"
...
TypeError: 'str' object does not support item assignment

Bytes

Em alguns casos o Python usa um tipo bytes, principalmente quando interage com fontes externas (servidor web ou IMAP, por exemplo). Leia sobre String and Bytes literals na documentação oficial do Python para esclarecer alguns detalhes.

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.