String em Python

1. Introdução

Um tipo interno importante em Python é a string - conjunto de caracteres. É usada para armazenar diversas informações de gênero textual.

Ao contrário de outras de linguagens de mais baixo nível, linguagem C por exemplo, as strings em Python possuem uma série de ferramentas para o seu processamento, e também, não contém um tipo de dado char( utiliza-se string de um caracter). Porém, é preservada a ordenação dos caracteres assim como na linguagem C, onde existe um valor posicional da esquerda para direita.

As strings em Python são imutáveis, ou seja, não podem ser alteradas no local é preciso utilizar métodos para a alteração dos objetos criados, mas na verdade o mesmo não é alterado e sim é criado um novo objeto com as novas informações.

2. Representação de String

Basicamente, as strings são muito fáceis de usar pois aceitam a atribuição de qualquer caracter. No entanto, existem várias formas de representação: apóstrofos, aspas, apóstrofos ou aspas triplas, sequências de escape, strings brutas e strings unicode.

2.1 Apóstrofos ou Aspas

São os mais utilizados e funcionam da mesma maneira, com uma ligeira diferença. Em strings que se quer apresentar um apóstrofo em seu conteúdo usa-se aspas, e em strings que será apresentada aspas emprega-se o apóstrofo.

Obs.: Está situação é uma facilidade da linguagem nada impede de usarmos caracteres de escape como veremos mais adiante.

>>> "d'agua"
"d'agua"

>>> 'd"agua'
'd"agua'

>>> "agua", 'agua'
('agua', 'agua')

2.2 Apóstrofos ou Aspas triplas

Usado para apresentar strings que se estendem em mais de uma linha. Pode ser incorporada em código html para apresentar alguma mensagem ao usuário, dentre outras.

>>> """Exemplo de representacao
... de string em bloco
... no Python"""
'Exemplo de representacao\nde string em bloco\nem Python'

Note que onde houve a quebra de linha o Python substitui a informação pelo caracter de escape (\n).

2.3 Sequências de escape

Sequências de escape caracterizam-se por uma barra invertida (\) que precede um ou mais caracteres, geralmente um, e esta sequência é substituida por seu equivalente no código ASCII(no exemplo anterior \n e substituido pelo caracter ASCII #10). São usadas para apresentar caracteres especias dentro de strings.

Veja um quadro de exemplo:

ESCAPE

SIGNIFICADO

\newline

Ignorado(continuação)

\\

Barra invertida (mantém uma \)

\'

Apóstrofo(mantém ')

\”

Aspas(mantém “)

\a

Bip

\b

Retrocesso

\f

Avanço de formulário

\n

Nova linha (avanço de linha)

\r

Carriage return

\t

Tabulação

\v

Tabulação Vertical

Como apresentado no tópico 2.1, veremos as mesmas situações utilizando sequências de escape.

>>> s = 'd\'agua'
>>> s
"d'agua"

>>> s = "d"agua"
>>> s
'd"agua'

2.4 Strings brutas

Conforme apresentado no item anterior, às vezes, as sequências de escape podem trazer resultados inesperados para o programador. Suponhamos que recebemos um caminho de um arquivo 'C:\temp\neve\teste.txt', o Python interpretará os caracteres (\n) e (\t) como sequências de escape e não teremos o resultado desejado. Para solucionarmos este episódio acrescentamos a letra (r) antes da string em questão.

>>> s = 'd\'agua'
>>> s
"a'agua"

>>> s = r'd\'agua'
>>> s
"d\\'agua"

2.5 Strings Unicodes

A forma mais incomum de se empregar o uso da string. Como os caracteres podem ser representados por mais de um byte na memória, esta representação possibilita uma maior representatividade para os caracteres ao contrário da string padrão. Esta forma é empregada basicamente na apresentação de alguns caracteres europeus ou asiáticos. Para usá-la basta acrescentar a letra (U) - maiúscula ou minúscula - ao início da string.

>>> u'exemplo'
u'exemplo'

3. Indexação e Fracionamento

As strings são um conjunto ordenado de caracteres e devido a essa característica podemos acessar seu valor pelo seu índice, que assim como na linguagem C começa da posição 0 e termina no tamanho menos 1. No entanto, apresenta algumas características particulares como a indexação com índices negativos. Para tal, o Python para a formação de um índice 'válido' pega o tamanho da string e soma ao índice apresentado.

>>> s = 'teste'
>>> s[ -2 ] # s[ 5 - 2 ] <=> s[ 3 ]
't'

O fracionamento é uma técnica de grande flexibilidade da linguagem em que consiste na retirada de substring da string original e possui a seguinte sintaxe:

s = [ a : b : c ]

onde,
s = objeto string
a = faixa inicial da substring
b = faixa final da substring
c = argumento facultativo

O terceiro argumento consiste a razão de uma PA(Progressão Aritmética), iniciando a partir do primeiro argumento até o segundo argumento.

>>> s = '123456'
>>> s[0:3]
'123'

>>> s [::2]
'135'

Uma algoritmo básico de cursos introdutórios a programação é inverter uma string - CASA, ASAC - em Python com fracionamento é uma tarefa muito mais simples.

>>> s = 'CASA'
>>> s[::-1]
'ASAC'

Um outro episódio bastante importante é o fato da passagem de parâmetros para os scripts. Podemos trabalhar excluindo o nome do script chamado pelo fracionamento, s = [1:0].

import sys
print
sys.argv


$
python script.py -h
[ 'script.py', '-h' ]

import sys
print sys.argv[1:]

$ python script.py -h
[ '-h' ]

4. Formatação de String

Assim como as sequências de escape apresentada, em Python, como na linguagem C, é possivel realizar a formatação de string utilizando o operado unário %. O sistema faz com que o conteúdo da esquerda que é precedido de um operador unário seja substituido por um ou mais(entre parênteses) apresentados no termo a esquerda.

CÓDIGO

SIGNIFICADO

%s

String(ou qualquer objeto)

%r

S, mas usa repr() e não str()

%c

Caractere

%d

Decimal(Inteiro)

%i

Inteiro

%u

Sem sinal(inteiro)

%o

Inteiro em octal

%x

Inteiro em hexadecimal

%X

X, mais imprime em maiúscula

%e

Expoente de ponto flutuante

%E

E, mais imprime em maiúscula

%f

Decimal de ponto flutuante

%g

E ou f de ponto flutuante

%G

E ou f de ponto flutuante

%%

'%' literal

>>> s = 'A inflacao subiu %d por cento este %s' % (10,'mes')
>>> s
'A inflacao subiu 10 por cento este mes'

Ainda é possível que a string se referencie a dicionários - dicionário é um outo tipo de objeto em Python que não entraremos em detalhes neste tutorial - presentes na esquerda.

>>> s = 'A inflacao subiu %(media)d por cento este %(periodo)' % { "media":10, "periodo":'mes' }
>>> s
'A inflacao subiu 10 por cento este mes'

5. Métodos de String

Métodos são funções associadas ao objeto, tecnicamente são atributos anexados as funções que são chamadas. É representado da seguinte forma: objeto.atributo.

Exemplos de métodos:

s.isalnum()
s.isdigit s.upper()
s.join(sequencia)
s.istitle()
s.replace( anterior, nova, n_ocorrencias)

Existe uma série de métodos que podem ser acessados atráves da página: http://docs.python.org/library/.

>>>
s = '000999'
>>> s.replace( '9', '0' )
'000000'

>>> s = '000999'
>>> s.replace( '9','0', 2 )
'000009'

José Mauro da Silva Sandy

4 comentários:

  Lopes

16 de outubro de 2008 às 07:21

Fala Zé!
Primeira postagem, primeiro comentário!
Antes de tudo, parabéns pela iniciativa do blog e desejo que ele dê muitos bons frutos!
Sobre a postagem, realmente Python tem uma facilidade absurda. O fato de ser uma linguagem orientada a objetos ajuda muito, já que toda string criada é um objeto e possui métodos. Assim fica mais fácil ainda trabalhá-las. A postagem ficou bem abrangente sobre o assunto e eu sugeriria que você abordasse futuramente os métodos da classe string. Só um exemplo da importância deste tema: segundo o site http://www.skymind.com/~ocrow/python_string/ , concatenar strings com o método join() gera um desempenho muito superior que usar o método tradicional (+=). Pelos testes do cara, para concaterar 20mil inteiros usando método tradicional, foi conseguida uma média de 3770 concatenações por segundo. Já com o join(), ele conseguiu 119800... Isso ainda é recomendado pelo PEP8: http://versaopropria.blogspot.com/2008/10/o-estilo-de-programao-pep8.html
Bom, é isso!
Parabéns pelo primeiro passo e pela ótima postagem!
Abraço!

  Anônimo

14 de março de 2009 às 01:34

Olá, parabéns pelo blog e pelas dicas sobre strings em python...
estou com algumas duvidas de iniciante... tem algumas constantes
tipo \f \b \v que não funcionam, mas exibe algum caracter desconhecido...

também gostaria de saber se é possivel juntar duas strings e/ou imprimir lado a lado.
a = '\n--- ---\nx x\n--- ---\n'
b = '\n--- ---\nx x\n--- ---\n'
gostaria que ficassem assim...
--- --- --- ---
x x x x
--- --- --- ---
tentei usar o metodo replace mas não consegui... será que existe uma solução sem usar modulos curses, Wcurses, etc?
Mario...
[]s

  Anônimo

2 de junho de 2009 às 16:20

Anônimo,

Que tal algo do tipo:

a1=a.splitlines()
b1=b.splitlines()
for i in range(a1.__len__())
print a1[i]
print b1[i]
print '\n'

Será que presta? Suas strings sempre têm o mesmo comprimento?

  Anônimo

13 de novembro de 2009 às 20:49

Obrigado pela resposta:

Consegui fazer essa versão para duas strings de qualquer tamanho:

http://pastebin.com/m3e8c67a3