Menu

Napisy (stringi) w Pythonie: f-stringi, wycinki i najważniejsze metody

Praca z tekstem w Pythonie: tworzenie napisów, f-stringi, wycinki i codzienne metody, takie jak split, join, replace i strip.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Tekst, ale z metodami

Napis (string) w Pythonie to ciąg znaków i będziesz go używać częściej niż jakiegokolwiek innego typu. Każda nazwa, etykieta, wiadomość, adres URL, ścieżka pliku i odpowiedź z API w którymś momencie jest napisem.

Tworzysz go w cudzysłowie: pojedynczym, podwójnym albo potrójnym:

Cudzysłowy pojedyncze i podwójne są wymienne. Używaj tych, przy których nie musisz poprzedzać znaku ukośnikiem. "don't" jest czyste; 'don\'t' wymaga ukośnika wstecznego.

Napisy są niemodyfikowalne. Gdy napis już istnieje, nie możesz zmienić żadnego jego znaku w miejscu. Każda operacja, która wygląda, jakby zmieniała napis, w rzeczywistości zwraca nowy. Dlatego piszesz text = text.upper(), a nie samo text.upper(): bez ponownego przypisania nowy napis wielkimi literami zostałby wyrzucony.

Łączenie i powtarzanie

Dwa operatory załatwiają większość łączenia napisów, jakiego potrzebujesz:

+ łączy napisy. * powtarza napis. Oba zwracają nowy napis.

Łączenie wielu kawałków przez + szybko robi się brzydkie. Gdy mieszasz w wiadomości wartości różnych typów, sięgnij zamiast tego po f-stringi, opisane w następnej sekcji.

f-stringi: tak zwykle będziesz formatować

Postaw f przed otwierającym cudzysłowem, a napis stanie się szablonem. Wszystko w {...} zostanie zastąpione wartością tego wyrażenia:

W klamrach możesz umieścić dowolne wyrażenie: zmienne, arytmetykę, wywołania metod i funkcji. Niech jednak będą proste; jeśli kusi cię, żeby wcisnąć do {...} trzylinijkowe obliczenie, najpierw zapisz wynik w nazwanej zmiennej.

f-stringi obsługują też specyfikatory formatu po dwukropku, które sterują formatowaniem liczb, dopełnianiem i wyrównaniem:

To te same specyfikatory, których używa str.format(). Warto je szybko przejrzeć, gdy poczujesz się pewnie z podstawami. W kodzie pierwszego dnia nie są potrzebne.

Wycinki: wybierz kawałek

Napisy można indeksować jak sekwencje. Każdy znak ma pozycję liczoną od zera i możesz pobrać jeden znak albo zakres:

Wzorzec [start:stop:step] pojawia się też w listach i innych sekwencjach, więc kilka minut poświęconych na jego przyswojenie zwraca się wszędzie.

Dwie rzeczy, na które warto zwrócić uwagę:

  • Indeks stop nie wchodzi do wyniku: word[0:2] obejmuje indeksy 0 i 1, bez 2.
  • Ujemne indeksy liczą od końca: -1 to ostatni znak, -2 przedostatni i tak dalej.

Jak odwrócić napis

Napisy nie mają metody .reverse(), bo są niemodyfikowalne, ale wycinek z krokiem -1 załatwia sprawę w jednej linii:

word[::-1] czyta się jako "od początku do końca, krokiem wstecz o 1". Wynik to zupełnie nowy napis; oryginał pozostaje nietknięty. Jeśli chcesz przejść po znakach od końca bez tworzenia nowego napisu, reversed(word) zwraca leniwy iterator.

Jak sprawdzić długość napisu

len(text) zwraca liczbę znaków:

Zauważ, że len liczy punkty kodowe Unicode, a nie bajty. len("café") to 4, a nie 5, choć zapis w UTF-8 zajmuje więcej bajtów. Zwykle właśnie o to chodzi.

Jak sprawdzić, czy napis zawiera podciąg

Idiomatycznym sprawdzeniem jest operator in, który czyta się jak zwykłe zdanie:

Żeby sprawdzać bez rozróżniania wielkości liter, najpierw ujednolić obie strony:

Jeśli potrzebujesz pozycji, a nie tylko odpowiedzi tak/nie, użyj .find(): zwraca indeks albo -1, gdy podciągu nie ma.

Popularne metody napisów

Napisy mają dziesiątki metod. Po tę garść będziesz sięgać bez przerwy:

Dzielenie i łączenie:

.split(separator) zamienia napis w listę. separator.join(list_of_strings) skleja ją z powrotem. Te dwie metody wykonują nieproporcjonalnie dużą część prawdziwej pracy z napisami.

Jeszcze jedna przydatna para:

To parser jednoliniowego wpisu konfiguracji w trzech liniach. Małe napisy, duże możliwości.

Sprawdzanie zawartości

Kilka metod zwraca wartości logiczne, przydatne w warunkach if:

Używaj ich oszczędnie: nie obsługują zawiłości Unicode tak, jak można by się spodziewać. Przy wszystkim poza ASCII oprzyj się na module regex albo module unicodedata.

Znaki specjalne i ucieczka

Niektóre znaki wymagają ukośnika wstecznego, żeby pojawić się w napisie:

Jeśli piszesz ścieżki Windows albo wyrażenia regularne, surowe napisy ułatwiają życie. Postaw r przed cudzysłowem, a ukośniki wsteczne przestaną być znakami ucieczki:

Napisy są wszędzie, więc dbaj o czytelność

Trzy nawyki, które chronią kod pełen napisów przed zamianą w zupę:

  1. Do wstawiania wartości używaj f-stringów. Nie łącz + wartości wielu typów.
  2. Przypisuj ponownie, gdy "zmieniasz" napis. text = text.strip(), a nie samo text.strip().
  3. Sięgaj po .split() i .join(), zanim napiszesz ręczne pętle do parsowania albo składania tekstu. Są szybsze, czytelniejsze i trudniej w nich o błąd.

Dalej: f-stringi dokładniej, czyli narzędzie do formatowania, które pojawiło się już kilka razy, oraz specyfikatory formatowania liczb i dat, dla których warto je opanować.

Najczęściej zadawane pytania

Czym jest f-string w Pythonie?

f-string to literał napisu z przedrostkiem f, w którym wszystko w {...} zostaje zastąpione wartością tego wyrażenia. Przykład: f"Hello, {name}!" wstawia do napisu bieżącą wartość name w trakcie działania programu.

Jak odwrócić napis w Pythonie?

Użyj wycinka z krokiem -1: reversed_text = original[::-1]. Zwraca to nowy napis złożony z tych samych znaków w odwrotnej kolejności. Oryginalny napis pozostaje nietknięty, bo napisy w Pythonie są niemodyfikowalne.

Jak podzielić napis w Pythonie?

Wywołaj .split() na napisie. Bez argumentu dzieli po dowolnych białych znakach: "a b c".split() zwraca ['a', 'b', 'c']. Możesz przekazać konkretny separator: "a,b,c".split(",") zwraca ['a', 'b', 'c'].

Czy napisy w Pythonie są modyfikowalne?

Nie. Napisy są niemodyfikowalne: gdy napis już istnieje, nie możesz zmienić żadnego jego znaku w miejscu. Każda metoda, która "zmienia" napis, w rzeczywistości zwraca nowy. Dlatego widzisz wzorce takie jak text = text.strip(): przypisujesz zmiennej nowy napis.

Jak łączyć napisy w Pythonie?

Użyj +, żeby połączyć dwa napisy: "hello" + " " + "world". Żeby wstawić wartość do zdania, wybierz f-string: f"Hello, {name}". Do łączenia wielu kawałków z listy użyj separator.join(pieces): to szybsze i czytelniejsze niż łańcuch +.

Jak sprawdzić długość napisu w Pythonie?

Wywołaj wbudowaną funkcję len(text). Zwraca liczbę znaków (punktów kodowych Unicode), więc len("café") to 4. Żeby poznać długość w bajtach, najpierw zakoduj napis: len(text.encode("utf-8")).

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ