2.14. O Tipo String
O tipo str
é capaz de representar uma sequência de caracteres, ou cadeia de caracteres, ou string.
Uma string pode ser expressa entre aspas duplas ou entre aspas simples:
>>> print("Introdução à Programação com Dados Geoespaciais")
Introdução à Programação com Dados Geoespaciais
ou:
>>> print('Introdução à Programação com Dados Geoespaciais')
Introdução à Programação com Dados Geoespaciais
Para escrever literais string que expandem por múltiplas linhas, pode-se usar três aspas duplas ou três aspas simples, como mostrado no exemplo abaixo:
>>> print("""Introdução
... à
... Programação
... com Dados Geoespaciais""")
Introdução
à
Programação
com Dados Geoespaciais
Repare que todos os caracteres e mudanças de linha são incluídos como parte do literal:
>>> print("""Introdução
... à
... Programação
... com Dados Geoespaciais""")
Introdução
à
Programação
com Dados Geoespaciais
Nota
Em Python, apenas expressões entre parênteses ((
, )
), colchetes ([
, ]
) ou chaves ({
, }
) podem expandir por múltiplas linhas físicas sem utilizar barras invertidas (\
). Por exemplo, se você abrir o terminal de comandos do Python e tentar dividir a expressão 10 + 20
em duas linhas, como na tentativa abaixo, um erro de sintaxe será gerado:
>>> 10 +
File "<stdin>", line 1
10 +
^
SyntaxError: invalid syntax
Se você quiser juntar duas ou mais linhas físicas em um único comando, terá que utilizar barras invertidas, como mostrado abaixo:
>>> 10 + \
... 20
30
A mesma coisa pode ser feita com uma string, que pode ser escrita em múltiplas linhas sem o uso das três aspas, mas com as barras invertidas:
>>> "Introdução \
... à \
... Programação \
... com Dados Geoespaciais"
'Introdução à Programação com Dados Geoespaciais'
2.14.1. Operações com Strings
2.14.1.1. Concatenação de Strings: \(s + t\)
O operador +
para strings possui uma interpretação diferente dos tipos numéricos, ele realiza a concatenação de duas strings:
>>> "Programação" + "Geoespacial"
'ProgramaçãoGeoespacial'
>>> "Programação " + "Geoespacial"
'Programação Geoespacial'
>>> "Introdução " + "Programação " + "Geoespacial"
'Introdução Programação Geoespacial'
Uma string é uma sequência imutável de caracteres. A concatenação de strings gera um novo objeto, isto é, uma nova string. Portanto, cuidado ao utilizar o operador +
repetidamente pois ele pode gerar um overhead desnecessário no seu programa. Há outras opções para realizar operações semelhantes, como por exemplo, usando o operador str.join() ou io.StringIO.
2.14.1.2. Repetição de Strings: \(n * s\)
Quando aplicado a um número inteiro \(n\) e uma string \(s\), o operador *
funciona como se estivéssemos adicionando a string \(s\) a ela própria, \(n\) vezes:
>>> "Programação" * 3
'ProgramaçãoProgramaçãoProgramação'
>>> 4 * "Programação"
'ProgramaçãoProgramaçãoProgramaçãoProgramação'
Nota
A lógica é que assim como \(3 * 2 = 2 + 2 + 2\), temos 3 * "a" = "a" + "a" + "a"
.
Nota
Para valores negativos, a expressão é equivalente a \(0 * s\):
>>> -4 * "Programação"
''
2.14.1.3. Pertinência: \(x\) in
\(s\)
\(x\) in
\(s\): retorna verdadeiro se a string \(s\) contém a sequência \(x\).
Exemplos:
>>> "i" in "imagem-cbers.tif"
>>> "a" in "imagem-cbers.tif"
>>> "cbers" in "imagem-cbers.tif"
>>> "landsat" in "imagem-cbers.tif"
2.14.1.4. Impertinência: \(x\) not in
\(s\)
\(x\) not in
\(s\): retorna falso se a string \(s\) contém a sequência \(x\).
Exemplos:
>>> "i" not in "imagem-cbers.tif"
>>> "a" not in "imagem-cbers.tif"
>>> "cbers" not in "imagem-cbers.tif"
>>> ".tif" not in "imagem-cbers.tif"
2.14.1.5. Comprimento da cadeia: len(s)
O operador len(s)
retorna o número de caracteres (ou tamanho) da string \(s\).
Exemplos:
>>> len("Programação Geoespacial")
23
>>> len("")
0
2.14.1.6. Índice (indexing): s[i]
O operador []
retorna o \(i\)-th caractere da string \(s\).
Exemplos:
>>> "Programação Geoespacial"[3]
>>> "Programação Geoespacial"[0]
Nota
O primeiro elemento de uma sequência possui índice \(0\).
Números negativos são usados para indexar a partir do final da string:
>>> "Programação Geoespacial"[-1]
>>> "Programação Geoespacial"[-3]
Um índice fora do limite irá lançar uma exceção do tipo IndexError
:
>>> "Programação Geoespacial"[23]
2.14.1.7. Slicing: s[i:j]
O operador [i:j]
extrai substrings de tamanho arbitrário.
Exemplo:
"imagem-landsat.tif"[0:3]
Se o valor antes do “:” for omitido, subentende-se o valor 0
:
"imagem-landsat.tif"[:6]
Se o valor após “:” for omitido, subentende-se o valor len(s)
:
"imagem-landsat.tif"[7:]
Se omitirmos os valores de índices dos dois lados do sinal de “:”, retornamos uma cópia completa da string:
"imagem-landsat.tif"[:]
Nota
A lógica do intervalo aberto à direita é que seja possível fazer: s[0:len(s)]
.
Dica
O tipo string é apenas um dos tipos de sequência disponíveis em Python. Uma lista completa das operações relativas aos tipos sequência, pode ser consultada em [19].
2.14.2. Métodos de Strings
Diversas operações sobre o tipo string encontram-se na forma de métodos. Um método nada mais é do que uma notação especial para chamada de funções, onde a função irá operar sobre o próprio dado indicado na chamada.
A sintaxe dessas operações, em geral, têm a seguite forma (Figura 2.18):
Onde:
str
: literal string, ou nome de uma variável string ou alguma outra expressão que produza uma string..
: operador membro, que permite acessar atributos e métodos de um objeto.op
: nome de um método associado ao objeto.argumentos
: lista dos valores necessários à chamada do método.
Nota
Em orientação a objetos, esse processo de chamada de métodos costuma ser referido como invocação de um método ou comunicação com o objeto.
2.14.2.1. s.find(sub[, start[, end]])
Sintaxe:
s.find(sub[, start[, end]])
Descrição: O método
find
procura a ocorrência da substringsub
ems
.Parâmetros:
sub
: Substring cuja ocorrência deseja-se ser localizada.start
: Parâmetro opcional que indica onde a busca deve começar dentro da strings
.end
: Parâmetro opcional que indica o limite (aberto) onde a busca deve terminar.
Retorno: Esse método retorna a posição do primeiro caractere na string
s
onde a ocorrência da substringsub
é encontrada, ou-1
caso não seja encontrada.
Nota
Atente-se para o fato de que os parâmetros start
e end
equivalem aos índices de uma operação de slice em strings ([star:end]
) e, portanto, o limite definido por eles é fechado à esquerda e aberto à direita.
Exemplos:
>>> "Programação Geoespacial".find("gra")
3
>>> "A grade de aulas".find("gra")
2
>>> "Landsat".find("gra")
-1
Dica
Se você não precisa saber a posição da substring, use o operador in
(Seção 2.14.1.3).
2.14.2.2. s.join(iterable)
Sintaxe:
s.join(iterable)
Descrição: O método
join
retorna uma string formada pela concatenação de uma sequência de strings (iterable
), usando como separador a strings
.Parâmetros:
iterable
: Um iterável é qualquer objeto que permita recuperar seus itens, ou membros, um de cada vez. Este pâmetro aceita iteráveis que produzam elementos do tipo string. Os tipos sequência, como string, listas e tuplas, são iteráveis. Assim, podemos utilizar como argumento, uma string, uma lista ou um tupla de strings.
Retorno: Uma string representando a concatenação dos elementos do iterável, uilizando como separador a string
s
.
Exemplos:
>>> "-".join(["Introdução", "Programação", "Geoespacial"])
'Introdução-Programação-Geoespacial'
Nota
A sequência de strings separadas por vírgula e delimitadas por [
e ]
corresponde a uma lista de strings.
>>> " ".join(["Introdução", "Programação", "Geoespacial"])
'Introdução Programação Geoespacial'
>>> "".join(["Introdução", "Programação", "Geoespacial"])
'IntroduçãoProgramaçãoGeoespacial'
>>> ",".join("Introdução à Programação com Dados Geoespaciais")
'I,n,t,r,o,d,u,ç,ã,o, ,à, ,P,r,o,g,r,a,m,a,ç,ã,o, ,c,o,m, ,D,a,d,o,s, ,G,e,o,e,s,p,a,c,i,a,i,s'
2.14.2.3. s.split(sep=None, maxsplit=-1)
Sintaxe:
s.split(sep=None, maxsplit=-1)
Descrição: Quebra a string
s
em várias, utilizando o separadorsep
.Parâmetros:
sep
: String que define o separador usado para realizar o particionamento da strings
. Trata-se de um parâmetro opcional. Se não for informado ou se usado um valorNone
, o caracter de espaço (whitespace)) é assumido como delimitador.maxsplit
: Este parâmetro opcional, pode ser usado para indicar o número máximo de divisões a serem realizadas.
Retorno: Uma lista de palavras.
Exemplo:
>>> "Introdução à Programação com Dados Geoespaciais".split()
['Introdução', 'à', 'Programação', 'com', 'Dados', 'Geoespaciais']
Nota
A sequência de strings separadas por vírgula e delimitadas por [
e ]
corresponde a uma lista de strings.
>>> "Introdução;à;Programação;com;Dados;Geoespaciais".split(";")
['Introdução', 'à', 'Programação', 'com', 'Dados', 'Geoespaciais']
>>> "1,2,,3,".split(",")
['1', '2', '', '3', '']
2.14.2.4. s.replace(old, new[, count])
Sintaxe:
s.replace(old, new[, count])
Descrição: Retorna uma string onde toda a ocorrência da substring
old
ems
, é substituída pela substringnew
.Parâmetros:
old
: Substring a ser substituída ems
.new
: Substring a ser incluída no lugar da substringold
.count
: Este argumento opcional limita o número de substituições.
Retorno: Uma string.
Exemplos:
>>> "Introdução à Programação com Dados Geoespaciais".replace("a", "@")
'Introdução à Progr@m@ção com D@dos Geoesp@ci@is'
>>> "Introdução à Programação com Dados Geoespaciais".replace("a", "@", 2)
'Introdução à Progr@m@ção com Dados Geoespaciais'
2.14.2.5. Outros Métodos de String
s.isdigit()
: retornaTrue
se todos os caracteres da string são dígitos, caso contrário, retornaFalse
.s.islower()
: retornaTrue
se todos os caracteres são minúsculos e exista pelo menos uma letra, caso contrário, retornaFalse
.str.isupper()
: retornaTrue
se todos os caracteres são maiúsculos e exista pelo menos uma letra, caso contrário, retornaFalse
.str.lower()
: retorna uma cópia da string com todos os caracteres em minúsculo.str.upper()
: retorna uma cópia da string com todos os caracteres em maiúsculo.
Dica
Para uma lista completa dos métodos de uma string, consulte [31].