Aula 04 – Python – String

Aula 04 – Curso de Python – Strings

Aulas baseadas no livro Python para Desenvolvedores do Luiz Eduardo Borges.

STRINGS EM PYTHON (TEXTO EM PYTHON)

As strings em Python são instruções intrínsecas (built-ins) para armazenar texto.
Como são imutáveis, não é possível adicionar, remover ou mesmo modificar algum caractere de uma string. Para realizar essas operações, o Python precisa criar um nova string.

 Como funciona Strings em python

Como funciona Strings em python

str = "casa"

Memória

Memória

str[3] = "o"

Memória

Memória

Saída:
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
TypeError: ‘str’ object does not support item assignment

id(str)

Saída:
2275647308328


#concatena e salva em outro objeto
str = str + " da moeda“
#ou 
str += " da moeda" 

id(str)

Saída:
2275647302704

Memória

Memória

str agora aponta para outro objeto na memória

str agora aponta para outro objeto na memória

str agora aponta para outro objeto na memória

O Garbage Collector verifica depois de um tempo que não existe mais nenhuma variável apontando para o objeto de id = 2275647308328, então ele o elimina da memória.

Tipos:

  • String padrão: s = ‘Olá mundo’
  • String unicode: u = u’Oi mundo’

A string padrão pode ser convertida para unicode através da função unicode().

A inicialização de strings pode ser:

  • Com aspas simples ou duplas.
  • Em várias linhas consecutivas, desde que seja entre três aspas simples ou duplas.
  • Sem expansão de caracteres (exemplo: s = r’\n’, em que s conterá os caracteres ‘\’ e ‘n’).

Operações com strings:


# -*- coding: latin1 -*-
nome = 'Toti’
# Concatenação
print('Olá' + nome + ', tudo bem? ‘)

Saída:
Olá Toti, Tudo bem?

Operações com strings:


# Interpolação
print('O tamanho da palavra %s é: %d' % (s,  len(s)))

Saída:
O tamanho da palavra Toti é: 4


# String tratada como sequência
for ch in s: 
    print(ch)

Saída:
T
o
t
i

Operações com strings:


# Strings são objetos
if s.startswith('T'): print(s.upper())

Saída:
TOTI


# o que acontecerá?
print(3 * s)

Saída:
‘TotiTotiToti’

Operador “%” é usado para fazer interpolação de strings. A interpolação é mais eficiente no uso de memória do que a concatenação convencional.

Símbolos usados na interpolação:

  • %s: string.
  • %d: inteiro.
  • %o: octal.
  • %x: hexacimal.
  • %f: real.
  • %e: real exponencial.
  • %%: sinal de percentagem.

Os símbolos podem ser usados para apresentar números em diversos formatos.

Exemplo:


# -*- coding: latin1 -*-
# Zeros a esquerda
print('Agora são %02d:%02d.' % (16, 30))

Saída:
Agora são 16:30.


# Real (número após o ponto controla as casas decimais)
print('Percentagem: %.1f%%, Exponencial:%.2e' % (5.333, 0.00314))

Saída:
Percentagem: 5.3%, Exponencial:3.14e-03


# Octal e hexadecimal
print('Decimal: %d, Octal: %o, Hexadecimal: %x' % (10, 10, 10))

Saída:
Decimal: 10, Octal: 12, Hexadecimal: a

A partir da versão 2.6, está disponível outra forma de interpolação além do operador “%”, o método de string e a função chamados format().
Exemplos:


medicos = [('Carlos', 'cardiologista', 'hospital Souza Aguiar'),
('Maria', 'oftalmologista', 'clínica dos olhos’)]
# Parâmetros identificados pela ordem
msg = '{0} é {1} do {2}’
for nome, especialidade, localTrabalho in medicos:
    print(msg.format(nome, especialidade, localTrabalho))

Saída:
Carlos é cardiologista do hospital Souza Aguiar
Maria é oftalmologista do clínica dos olhos


# Parâmetros identificados pelo nome
msg = '{saudacao}, são {hora:02d}:{minuto:02d}’
print(msg.format(saudacao='Bom dia', hora=7, minuto=30))

Saída:
Bom dia, são 07:30


# Função builtin format()
print('Pi =', format(3.14159, '.3e’))

Saída:
Pi = 3.142e+00

A função format() pode ser usada para formatar apenas um dado de cada vez.

Fatias (slices) de strings podem ser obtidas colocando índices entre colchetes após a string.

string slice

string slice

Os índices no Python:

  • Começam em zero.
  • Contam a partir do fim se forem negativos.
  • Podem ser definidos como trechos, na forma [inicio:fim + 1:intervalo]. Se não for definido o inicio, será considerado como zero. Se não for definido o fim + 1, será considerado o tamanho do objeto. O intervalo (entre os caracteres), se não for definido, será 1.

É possível inverter strings usando um intervalo negativo:

print('Python'[::-1])
Saída:
nohtyP

Várias funções para tratar com texto estão implementadas no módulo string.


# -*- coding: latin1 -*-
# importando o módulo string
import string
# O alfabeto
a = string.ascii_letters
print(a)

Saída:
‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’


# Rodando o alfabeto um caractere para a esquerda
b = a[1:] + a[0]

Saída: ‘bcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZa’

O método str.maketrans () é usado para criar uma tabela de conversão de mapeamentos de caracteres, o primeiro argumento é uma string que representa o caractere a ser convertido, o segundo parâmetro é a representação de cadeia de conversões.

Nota: As duas strings devem ter o mesmo comprimento e um relacionamento de 1-1 .


intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)

str = "Essa é uma string de exemplo!!!"
print(str.translate(trantab))

Saída: Ess1 é 5m1 str3ng d2 2x2mpl4!!!

O módulo também implementa um tipo chamado Template, que é um modelo de string que pode ser preenchido através de um dicionário. Os identificadores são iniciados por cifrão ($) e podem ser cercados por chaves, para evitar confusões.


# -*- coding: latin1 -*-
# importando o módulo string
import string
# Cria uma string template
st = string.Template('$aviso aconteceu em $quando')
# Preenche o modelo com um dicionário
s = st.substitute({'aviso': 'A falta de eletricidade',
'quando': '03 de Fevereiro de 2002'})
print(s)

Saída:
A falta de eletricidade aconteceu em 03 de Fevereiro de 2002

É possível usar strings mutáveis no Python, através do módulo UserString, que define o tipo MutableString:


# -*- coding: latin1 -*-
# importando o módulo UserString
import UserString
s = UserString.MutableString('Python')
s[0] = 'p'
print(s)

Saída: python

Strings mutáveis são menos eficientes do que strings imutáveis, pois são mais complexas (em termos de estrutura), o que se reflete em maior consumo de recursos (CPU e memória).

As strings unicode podem convertidas para strings convencionais através do método decode() e o caminho inverso pode ser feito pelo método encode().


# -*- coding: latin1 -*-
# String unicode
u = u'Hüsker Dü'
# Convertendo para str
s = u.encode('latin1')
print(s, '=>', type(s))

Saída: b’H\xfcsker D\xfc’ => <class ‘bytes’>


u = s.decode('latin1')
print(repr(u), '=>', type(u))

Saída: ‘Hüsker Dü’ => <class ‘str’>

Para usar os dois métodos, é necessário passar como argumento a codificação compatível, as mais utilizadas com a língua portuguesa são “latin1” e “utf8”.

Obrigado

Até a próxima

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *