Aula 04 - Curso de Python - Strings

As strings em Python são instruções nativas (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 uma nova string. str = "casa" str[3] = "o" 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

str agora aponta para outro objeto na memória

Garbage Collector

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. 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