Strängmetoder i Python

Slutförd

Strängmetoder är en av de vanligaste metodtyperna i Python. Du behöver ofta ändra strängar för att extrahera information eller anpassa ett visst format. Python innehåller flera strängmetoder som är utformade för att utföra de vanligaste och mest användbara omvandlingarna.

Strängmetoder är en del av str typen. Det innebär att metoderna finns som strängvariabler eller en del av strängen direkt. Metoden .title() returnerar till exempel strängen i inledande versaler och kan användas med en sträng direkt:

print("temperatures and facts about the moon".title())

Produktionen: Temperatures And Facts About The Moon

Samma beteende och användning sker på en variabel:

heading = "temperatures and facts about the moon"
heading_upper = heading.title()
print(heading_upper)

Dela upp en sträng

En vanlig strängmetod är .split(). Utan argument separerar metoden strängen vid varje blanksteg. Detta skulle skapa en lista över varje ord eller tal som avgränsas med ett blanksteg:

temperatures = "Daylight: 260 F Nighttime: -280 F"
temperatures_list = temperatures.split()
print(temperatures_list)

Produktionen: ['Daylight:', '260', 'F', 'Nighttime:', '-280', 'F']

I det här exemplet hanterar du flera rader, så det (implicita) nyradstecknet kan användas för att dela upp strängen i slutet av varje rad och skapa enskilda rader:

temperatures = "Daylight: 260 F\n Nighttime: -280 F"
temperatures_list = temperatures.split('\n')
print(temperatures_list)

Produktionen: ['Daylight: 260 F', 'Nighttime: -280 F']

Den här typen av delning blir praktisk när du behöver en loop för att bearbeta eller extrahera information, eller när du läser in data från en textfil.

Sök efter en sträng

Vissa strängmetoder kan söka efter innehåll innan bearbetningen, utan att använda en loop. Anta att du har två meningar som diskuterar temperaturer på olika planeter och månar. Men du är bara intresserad av temperaturer som är relaterade till vår måne. Det vill säga, om meningarna inte talar om månen, bör de inte bearbetas för att extrahera information.

Det enklaste sättet att identifiera om ett visst ord, tecken eller grupp med tecken finns i en sträng är att använda operatorn in :

print("Moon" in "This text will describe facts and challenges with space travel")

Produktionen: False

print("Moon" in "This text will describe facts about the Moon")

Produktionen: True

En metod för att hitta positionen för ett visst ord i en sträng är att använda .find() metoden:

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Moon"))

Produktionen: -1

Metoden .find() returnerar en -1 när ordet inte hittas eller returnerar indexet (talet som representerar platsen i strängen). Så här fungerar det om du söker efter ordet Mars:

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Mars"))

Produktionen: 64

64 är den position där "Mars" visas i strängen.

Ett annat sätt att söka efter innehåll är att använda .count() metoden, som returnerar det totala antalet förekomster av ett visst ord i en sträng:

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

Strängar i Python är skiftlägeskänsliga, vilket innebär att måne och måne anses vara olika ord. Om du vill göra en skiftlägeskänslig jämförelse kan du konvertera en sträng till alla gemener .lower() med hjälp av metoden:

print("The Moon And The Earth".lower())

Produktionen: the moon and the earth

På samma .lower() sätt som metoden har strängar en .upper() metod som gör motsatsen och konverterar varje tecken till versaler:

print("The Moon And The Earth".upper())

Produktionen: THE MOON AND THE EARTH

Dricks

När du söker efter och kontrollerar innehåll är en mer robust metod att ge en sträng gemener så att höljet inte förhindrar en matchning. Om du till exempel räknar antalet gånger ordet visas, skulle metoden inte räkna de gånger då The visas, även om de båda är samma ord. Du kan använda .lower() metoden för att ändra alla tecken till gemener.

Kontrollera innehåll

Det finns tillfällen då du bearbetar text för att extrahera information som är oregelbunden i presentationen. Följande sträng är till exempel enklare att bearbeta än ett ostrukturerat stycke:

temperatures = "Mars Average Temperature: -60 C"

Om du vill extrahera medeltemperaturen på Mars kan du göra bra ifrån dig med följande metoder:

temperatures = "Mars Average Temperature: -60 C"
parts = temperatures.split(':')
print(parts)
print(parts[-1])
['Mars average temperature', ' -60 C']
' -60 C'

Föregående kod litar på att allt efter kolonet (:) är en temperatur. Strängen delas på :, vilket ger en lista över två objekt. Om du använder [-1] i listan returneras det sista objektet, vilket är temperaturen i det här exemplet.

Om texten är oregelbunden kan du inte använda samma delningsmetoder för att hämta värdet. Du måste loopa över objekten och kontrollera om värdena är av en viss typ. Python har metoder som hjälper dig att kontrollera typen av sträng:

mars_temperature = "The highest temperature on Mars is about 30 C"
for item in mars_temperature.split():
    if item.isnumeric():
        print(item)

Produktionen: 30

.isnumeric() Precis som med metoden .isdecimal() kan du söka efter strängar som ser ut som decimaler.

Viktigt!

Det kan vara förvånande att lära sig att "-70".isnumeric() skulle returnera False. Det beror på att alla tecken i strängen måste vara numeriska och att strecket (-) inte är numeriskt. Om du behöver kontrollera negativa tal i en sträng .isnumeric() fungerar inte metoden.

Det finns extra valideringar som du kan använda på strängar för att söka efter värden. För negativa tal är strecket prefix för talet och det kan identifieras med .startswith() metoden:

print("-60".startswith('-'))

Produktionen: True

.endswith() På samma sätt hjälper metoden till med att verifiera det sista tecknet i en sträng:

if "30 C".endswith("C"):
print("This temperature is in Celsius")

Produktionen: This temperature is in Celsius

Transformera text

Det finns andra metoder som hjälper till i situationer där text behöver omvandlas till något annat. Hittills har du sett strängar som kan använda C för Celsius och F för Fahrenheit. Du kan använda .replace() metoden för att hitta och ersätta förekomster av ett tecken eller en grupp med tecken:

print("Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius.".replace("Celsius", "C"))

Produktionen: Saturn has a daytime temperature of -170 degrees C, while Mars has -28 C.

Som tidigare .lower() nämnts är ett bra sätt att normalisera text för att göra en skiftlägeskänslig sökning. Låt oss snabbt kontrollera om någon text diskuterar temperaturer:

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text)

Produktionen: False

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text.lower())

Produktionen: True

Du kanske inte behöver göra skiftlägesokänslig verifiering hela tiden, men att sänka varje bokstav är en bra metod när texten använder blandat hölje.

När du har delat upp texten och utfört transformeringen kan du behöva sätta ihop alla delar igen. På samma .split() sätt som metoden kan separera tecken .join() kan metoden sätta ihop dem igen.

Metoden .join() kräver en itererbar (till exempel en Python-lista) som ett argument, så dess användning ser annorlunda ut än andra strängmetoder:

moon_facts = ["The Moon is drifting away from the Earth.", "On average, the Moon is moving about 4cm every year."]
print(' '.join(moon_facts))

Produktionen: The Moon is drifting away from the Earth. On average, the Moon is moving about 4cm every year.

I det här exemplet ' ' används för att koppla alla objekt i listan.