Métodos String em Python
Os métodos String são um dos tipos de método mais comuns em Python. Muitas vezes, você precisa manipular cadeias de caracteres para extrair informações ou ajustar um determinado formato. Python inclui vários métodos de cadeia de caracteres que são projetados para fazer as transformações mais comuns e úteis.
Os métodos String são parte do tipo, o str
que significa que os métodos existem como variáveis de cadeia de caracteres ou parte da cadeia de caracteres diretamente. Por exemplo, o método .title()
retorna a cadeia de caracteres em maiúsculas iniciais e pode ser usado diretamente com uma cadeia de caracteres:
print("temperatures and facts about the moon".title())
Saída: Temperatures And Facts About The Moon
O mesmo comportamento e uso acontece em uma variável:
heading = "temperatures and facts about the moon"
heading_upper = heading.title()
print(heading_upper)
Dividir uma cadeia de caracteres
Um método de cadeia de caracteres comum é .split()
. Sem argumentos, o método separa a cadeia de caracteres em cada espaço. Se você usar o método dessa maneira, criará uma lista de cada palavra ou número separado por um espaço:
temperatures = "Daylight: 260 F Nighttime: -280 F"
temperatures_list = temperatures.split()
print(temperatures_list)
Saída: ['Daylight:', '260', 'F', 'Nighttime:', '-280', 'F']
Neste exemplo, você está lidando com várias linhas, de modo que o caractere de nova linha (implícito) pode ser usado para dividir a cadeia de caracteres no final de cada linha, criando linhas únicas:
temperatures = "Daylight: 260 F\n Nighttime: -280 F"
temperatures_list = temperatures.split('\n')
print(temperatures_list)
Saída: ['Daylight: 260 F', 'Nighttime: -280 F']
Esse tipo de divisão torna-se útil quando você precisa de um loop para processar ou extrair informações, ou quando está carregando dados de um arquivo de texto.
Procurar uma cadeia de caracteres
Alguns métodos de cadeia de caracteres podem procurar conteúdo antes de processar, sem usar um loop. Vamos supor que você tenha duas frases que discutem as temperaturas em vários planetas e luas. No entanto, você está interessado apenas em temperaturas que estão relacionadas com a nossa Lua. Ou seja, se as frases não estão falando sobre a Lua, elas não devem ser processadas para extrair informações.
A maneira mais simples de descobrir se uma determinada palavra, caractere ou grupo de caracteres existe em uma cadeia de caracteres é usar o in
operador:
print("Moon" in "This text will describe facts and challenges with space travel")
Saída: False
print("Moon" in "This text will describe facts about the Moon")
Saída: True
Uma abordagem para encontrar a posição de uma palavra específica em uma cadeia de caracteres é usar o .find()
método:
temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Moon"))
Saída: -1
O .find()
método retorna a -1
quando a palavra não é encontrada ou retorna o índice (o número que representa o local na cadeia de caracteres). O exemplo a seguir mostra como ele se comportaria se você estivesse procurando pela palavra Marte:
temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Mars"))
Saída: 64
64
é a posição onde "Mars"
aparece na cadeia de caracteres.
Outra maneira de pesquisar conteúdo é usar o .count()
método, que retorna o número total de ocorrências de uma determinada palavra em uma cadeia de caracteres:
temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.count("Mars"))
print(temperatures.count("Moon"))
1
0
Strings em Python são sensíveis a maiúsculas e minúsculas, o que significa que Lua e Lua são consideradas palavras diferentes. Para fazer uma comparação que não diferencia maiúsculas de minúsculas, você pode converter uma cadeia de caracteres em todas as letras minúsculas usando o .lower()
método:
print("The Moon And The Earth".lower())
Saída: the moon and the earth
Semelhante ao .lower()
método, as cadeias de caracteres têm um .upper()
método que faz o oposto, convertendo todos os caracteres em maiúsculas:
print("The Moon And The Earth".upper())
Saída: THE MOON AND THE EARTH
Gorjeta
Quando você está pesquisando e verificando conteúdo, uma abordagem mais robusta é minúscula uma cadeia de caracteres para que o invólucro não impeça uma correspondência. Por exemplo, se você estiver contando o número de vezes que a palavra The aparece, o método não contará as vezes em que The aparece, mesmo que ambas sejam a mesma palavra. Você pode usar o .lower()
método para alterar todos os caracteres para minúsculas.
Verificar conteúdo
Há momentos em que você processa texto para extrair informações irregulares em sua apresentação. Por exemplo, a seguinte cadeia de caracteres é mais simples de processar do que um parágrafo não estruturado:
temperatures = "Mars Average Temperature: -60 C"
Para extrair a temperatura média em Marte, você pode se sair bem com os seguintes métodos:
temperatures = "Mars Average Temperature: -60 C"
parts = temperatures.split(':')
print(parts)
print(parts[-1])
['Mars average temperature', ' -60 C']
' -60 C'
O código anterior confia que tudo depois dos dois pontos (:
) é uma temperatura. A cadeia de caracteres é dividida em :
, o que produz uma lista de dois itens. Usar [-1]
na lista retorna o último item, que é a temperatura neste exemplo.
Se o texto for irregular, você não poderá usar os mesmos métodos de divisão para obter o valor. Você deve fazer um loop sobre os itens e verificar se os valores são de um determinado tipo. Python tem métodos que ajudam a verificar o tipo de string:
mars_temperature = "The highest temperature on Mars is about 30 C"
for item in mars_temperature.split():
if item.isnumeric():
print(item)
Saída: 30
Como o .isnumeric()
método, .isdecimal()
pode verificar cadeias de caracteres que se parecem com decimais.
Importante
Pode ser surpreendente saber que "-70".isnumeric()
voltaria False
. Isso ocorre porque todos os caracteres na cadeia de caracteres precisariam ser numéricos e o traço (-
) não é numérico. Se você precisar verificar números negativos em uma cadeia de caracteres, o .isnumeric()
método não funcionaria.
Há validações extras que você pode aplicar em cadeias de caracteres para verificar valores. Para números negativos, o traço é prefixado ao número, e isso pode ser detetado com o .startswith()
método:
print("-60".startswith('-'))
Saída: True
Da mesma forma, o .endswith()
método ajuda a verificar o último caractere de uma cadeia de caracteres:
if "30 C".endswith("C"):
print("This temperature is in Celsius")
Saída: This temperature is in Celsius
Transformar o texto
Existem outros métodos que ajudam em situações em que o texto precisa ser transformado em outra coisa. Até agora, você viu cordas que podem usar C para Celsius e F para Fahrenheit. Você pode usar o .replace()
método para localizar e substituir ocorrências de um caractere ou grupo de caracteres:
print("Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius.".replace("Celsius", "C"))
Saída: Saturn has a daytime temperature of -170 degrees C, while Mars has -28 C.
Como mencionado anteriormente, .lower()
é uma boa maneira de normalizar o texto para fazer uma pesquisa que não diferencia maiúsculas de minúsculas. Vamos verificar rapidamente se algum texto discute temperaturas:
text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text)
Saída: False
text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text.lower())
Saída: True
Talvez você não precise fazer a verificação sem diferenciação de maiúsculas e minúsculas o tempo todo, mas reduzir todas as letras é uma boa abordagem quando o texto usa caixa mista.
Depois de dividir o texto e executar as transformações, talvez seja necessário unir as partes novamente. Assim como o .split()
método pode separar caracteres, o .join()
método pode juntá-los novamente.
O .join()
método requer um iterável (como uma lista Python) como um argumento, portanto, seu uso parece diferente de outros métodos de cadeia de caracteres:
moon_facts = ["The Moon is drifting away from the Earth.", "On average, the Moon is moving about 4cm every year."]
print(' '.join(moon_facts))
Saída: The Moon is drifting away from the Earth. On average, the Moon is moving about 4cm every year.
Neste exemplo, ' '
é usado para unir todos os itens da lista.