python

Nauka podstaw Pythona – Python + Strings

Nauka Podstaw Python String

Zadaniem programisty bardzo często jest obsługa zmiennych napisowych (łańcuchów znaków) czyli tzw. stringów. Dzieje się to szczególnie często w przypadku programowania webowego. Zagadnienie zmiennych napisowych w Pythonie jest wbrew pozorom bardzo obszerne. W tym artykule chciałbym skupić się na pokazaniu najpotrzebniejszych operacji związanych ze zmiennymi napisowymi.

Łańcuchy znaków w programowaniu zazwyczaj są zazwyczaj utożsamiane z listą (lub tablicą) pojedynczych znaków. Dzieje się tak dlatego, że w komputerze na bardzo niskim poziomie abstrakcji przechowywane są liczby, a każdy pojedynczy znak można zamienić na liczbę.

O różnych typach danych w Pythonie pisałem już przy okazji pierwszego artykułu z cyklu Nauka Podstaw Pythona, do lektury którego zachęcam Ciebie już teraz :)

Dużą literę ‚A’ w komputerze przechowujemy jako liczbę 65, gdyż taki jest jej kod ASCII. Aby zamienić znak na kod lub odwrotnie, mamy do dyspozycji funkcje ord oraz char.

W Pythonie łańcuchy znaków i znaki są tego samego typu

Nie ma tutaj również znaczenia czy użyjemy pojedycznych aspostrofów, cudzysłowia czy nawet 3 cudzysłowów.

Operacje tekstowe

Mimo tego, zmienne napisowe możemy traktować jako listy ze znakami, a co za tym idzie, wykonywać podobne operacje jak na listach.

Cięcie napisów

Jedną z najbardziej przydatnych operacji będzie cięcie list, a w naszym przypadku stringów.

Rozdzielanie napisów

Bardzo często będziemy chcieli podzielić jakiś napis. Może być to rozdzielenie wyrazów oddzielonych przecinkiem lub podział tekstu na zdania. Służy do tego metoda split, która jako parametr przyjmuje separator – czyli znak lub ciąg znaków, które rozdzielają interesujące nas fragmenty tekstu.

Jak widać na powyższym przykładzie separator trzeba określać dokładnie, włącznie ze znakami białymi takimi jak spacje. W innym wypadku znaki te pojawią się w rozdzielonych fragmentach, tak jak powyżej (zwróć uwagę na spacje występujące przed 2 elementami tablicy).

Możemy wskazać również jak dużo separatorów chcemy brać pod uwagę przy dzieleniu tekstu:

Łączenie napisów

Wiesz już jak podzielić napis na fragmenty, teraz pokażę Ci jak z kilku napisów bądź znaków stworzyć jeden napis. Pomoże nam w tym metoda join.

Wielkość liter

Jeżeli chcemy zmienić wielkość liter możemy użyć funkcji upper, lower, capitalize, title, swapcase:

Znajdowanie wzorców w tekście

Bardzo często mając do przetworzenia jakiś tekst, interesuje nas czy dany wzorzec występuje w tekście. Do tego możemy użyć operacji in wbudowanej w język:

Korzystając z powyższej metody mamy informację, że dany ciąg znaków znajduje się w tekście. Jeżeli chcemy dokładniejszej informacji o miejscu, w którym dany fragment się znajduje możemy użyć metod find lub index.

Jak widać na powyższym przykładzie, obie metody działają niemal identycznie. Różnica polega na tym, że metoda index w razie nieznalezienia wzorca w tekście zwraca błąd, a metoda find wartość -1.

W przypadku wystąpienia dwóch lub więcej wzorców zostanie zwrócony indeks pierwszego wystąpienia. Jeżeli wzorców jest więcej, możemy je policzyć metodą count:

Przydatnymi mogą również okazać się metody startswith i endswith, które pozwają określić czy dany napis rozpoczyna się lub kończy daną sekwencją znaków.

Zamiana wzorca

Wiesz już jak znajdować wzorzec, teraz pokażę Ci jak zamienić w tekście znak lub ciąg znaków na inny. Służy do tego metoda replace.

Jak widać na powyższym przykładzie metoda replace zamieniła wszystkie wystąpienia danego znaku. Można jednak ograniczyć liczbę zamian za pomocą ostatniego parametru:

Zamiana również działa dla ciągu znaków:

W przypadku braku danego wzorca w tekście zwrócony tekst będzie miał identyczną wartość jak wcześniej, nie zostanie rzucony żaden błąd:

Walidacja napisów

Bardzo często napis przechowywany przez nas zmiennje pochodzi z innych źródeł – na przykład od użytkownika. Chcemy wtedy dokonać walidacji tego ciągu znaków. Do tego możemy wykorzystać kilka mechanizmów wbudowanych w Pythona. Metody te można poznać po nazwie rozpoczynającej się od is-.

Przydatnym sprawdzeniem jest czy dane napisowe są alfranumeryczne(metoda isalnum)

Możesz również sprawdzić czy ciąg znaków składa się z samych liter (metoda isaplha):

czy też cyfr (metoda isdigit):

Do sprawdzenia czy string składa się tylko ze znaków białych (czyli np. spacji, tabów) służy metoda isspace:

Dostępne są również metody pozwalające sprawdzić wielkość liter:

Usuwanie spacji

Czasem string otrzymany od użytkownika jest otoczony niepotrzebnymi znakami białymi. Służą do tego metody strip.

Formatowane napisy

Jedną z najprzydatniejszych funkcji związanych z napisami jest tworzenie formatowanych napisów. Polega to na tworzeniu tekstów z wykorzystaniem wartośći zmiennych w naszym programie.

Jedną z metod jest sklejanie napisów (tzw konkatenacja) za pomocą zwykłego operatora dodawania.

W Pythonie ważne, aby wszystkie dodawane elementy były tego samego typu, czyli w tym przypadku napisami.

Metoda ta jednak nie jest najbardziej użyteczna. Dużo lepiej sprawdza się formatowany string.

W Pythonie jest na to kilka sposób, jednak w najnowszych wersjach preferowane są tzw. f-stringi. Rozpoznasz je po literze f znajdującej się przed cudzysłowiem.

Zmienne w f-stringach umieszczamy w nawiasch klamrowych tak jak widać to na powyższym przykładzie.

W nawiasach klamrowych umieszczać możemy również operacje:

Korzystając z f-stringów możemy również narzucać odpowiedni format liczb:

Liczba zostanie odpowiednio zaokrąglona zgodnie z zasadami matematyki.

Możemy również użyć separatora tysięcznego:

Opisane powyżej operacje możliwe są jedynie od wersji 3.6 Pythona. We wcześniejszych wersjach należy skorzystać z metody format.

Bloki tekstowe

Czasami chcemy stworzyć zmienną przechowującą dłuższy tekst, składający się z wielu linii, wcięć. Służą do tego bloki tekstowe, które tworzymy za pomocą potrójnych cudzysłowów.

Nowa linia i tabulacja

Innym sposobem umieszczania znaków końca linii czy tabulacji jest korzystanie ze znaków specjalnych. Znak nowej linii to (\n), a tabulacji to (\t).

jak widać jest to znacznie mniej czytelny sposób niż bloki tekstu.

Znaki specjalne w tekście

Zauważyłeś już pewnie, że w stringach często używa się pewnych znaków ze specjalną funkcją, takich jak apostrofy, cudzysłowia czy ukośniki.

Często jednak znaki te potrzebne są w tekście, który piszemy.

Jeżeli chodzi o używanie cudzysłowów czy apostrofów to sprawa jest prosta. Jeżeli w tekście chcemy użyć cudzysłowów, to string piszemy w apostrofach i odwrotnie.

Gdy chcesz użyć apostrofów i cudzysłowów, cały string zamknij w potrójnych apostrofach/cudzysłowach:

Inną metodą jest stosowanie znaku ucieczki czyli ukośnika (/). Znak ten pozbawia inny znak specjalny jego funkcji i pozwala traktować jako zwykły znak.

Tak samo można zrobić z ukośnikiem:

Funkcja print

Skoro opisuję już zmienne napisowe to należy wspomnieć o powiązanej z nimi funkcją print, czyli funkcją do wyświetlania napisu.

Nie trzeba nikomu tłumaczyć podstawowego sposobu jej działania.

Funkcja ta pozwala jednak również na nieco więcej.

Możesz drukować kilka zmiennych obok siebie, nie myśląc nawet o ich typach.

Domyślnym separatorem wartości jest spacja, jednak możemy to zmienić ustawiając wartość parametru sep.

Domyślnie każda wydrukowana wartość kończy się znakiem nowej linii. To również możemy zmienić

Najczęstym wykorzystaniem tej funkcji jest właśnie drukowanie napisów, które nie kończą się znakiem nowej linii:

Funkcja print pozwala również zapisywać tekst od razu do pliku. Aby to zrobić musimy ustawić wartość parametru file podając tam zmienną plikową (tzw uchwyt do pliku):

Wyświetlanie struktur danych

Często podczas pracy z bardziej skomplikowanymi danymi jak np zagnieżdżone słowniki (często zdarza się to parsując dane w formacie JSON) chcemy przejrzeć dane wyświetlając je na ekran.

Wyświetlanie ich za pomocą zwykłej funkcji print może nie być zbyt czytelne:

Aby wyświetlić to w znacznie przyjemniejszy dla oka sposób możesz użyc biblioteki pprint

Podsumowanie

W tym artykule pokazałem Ci narzędzia i mechanizmy związane z obsługą zmiennych napisowych w Pythonie.

Wydaje się dużo jak na jeden raz? Być może, jednak chciałem przedstawić Ci pewnego rodzaju kompendium wiedzy z tym związanej.

Jeżeli kiedyś będziesz pracował ze stringami i nie będziesz pamiętał jak wykonać konkretną operację, zawsze możesz wrócić do tego artykułu i przypomnieć sobie potrzebną operację :)

Pamiętaj jednak, że to wszystko co przedstawiłem to właściwie wierzchołek góry lodowej. Nie wymieniłem nawet wszystkich mechanizmów związanych z napisami, które są wbudowane w Pythona.

Zabrakło nawet wyrażeń regularnych, jednak nieumieszczenie ich było celowe, gdyż jest to zbyt skomplikowany temat aby umieszczać go w tym artykule.

Nie pisałem także nic o dodatkowych bibliotekach, które ułatwiają pracę ze stringami i poszerzają możliwości na obsługę ich.

Między innymi o takich bibliotekach (np. bibliotece do szerszej walidacji napisów) możesz przeczytać w dokumencie, który dla Ciebie przygotowałem.

20 przydatnych bibliotek w Pythonie

Wystarczy, że wejdziesz na stronę główną, klikniesz na okładkę dokumentu i zapiszesz się na newsletter, a otrzymasz link do jego pobrania :)

Zachęcam Cię do zapoznania się z nim, gdyż wykorzystanie wylistowanych w nim bibliotek i pakietów naprawdę może usprawnić, i co może nawet ważniejsze, uprzyjemnić Twoją pracę :)

Daj znać jak podobał Ci się ten tekst :)

Jeśli możesz to napisz w komentarzu o jakich tematach związanych z nauką Pythona chciałbyś przeczytać artykuł :)

Pozdrawiam Cię serdecznie! :)

Kamil Kwapisz

Tagged , , , , ,

About Kamil Kwapisz

Jestem studentem informatyki na Politechnice Warszawskiej i entuzjastą Pythona.
View all posts by Kamil Kwapisz →

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *