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):

Chamada de um método

Figura 2.18 - Chamada de um método.

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 substring sub em s.

  • 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 string s.

    • 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 substring sub é 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 string s.

  • 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 separador sep.

  • Parâmetros:

    • sep: String que define o separador usado para realizar o particionamento da string s. Trata-se de um parâmetro opcional. Se não for informado ou se usado um valor None, 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 em s, é substituída pela substring new.

  • Parâmetros:

    • old: Substring a ser substituída em s.

    • new: Substring a ser incluída no lugar da substring old.

    • 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(): retorna True se todos os caracteres da string são dígitos, caso contrário, retorna False.

  • s.islower(): retorna True se todos os caracteres são minúsculos e exista pelo menos uma letra, caso contrário, retorna False.

  • str.isupper(): retorna True se todos os caracteres são maiúsculos e exista pelo menos uma letra, caso contrário, retorna False.

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