W tym poradniku zgłębisz tajniki wykorzystania metody `split()` w języku Python, która umożliwia rozdzielenie tekstu na fragmenty, tworząc z nich listę.
Podczas pracy z sekwencjami znaków w Pythonie, masz do dyspozycji szereg wbudowanych metod manipulacji łańcuchami. Pozwalają one modyfikować tekst, na przykład poprzez zmianę wielkości liter, sortowanie znaków i inne transformacje. Jedną z tych przydatnych metod jest właśnie `.split()`. Pozwala ona przekształcić łańcuch w listę mniejszych łańcuchów. W kolejnych akapitach przeanalizujemy jej działanie na przykładach kodu.
Po przeczytaniu tego artykułu, zdobędziesz wiedzę na temat:
- Mechanizmu działania metody `.split()`
- Sposobów modyfikacji podziału tekstu za pomocą parametrów `sep` i `maxsplit`
Zacznijmy!
Sposób użycia metody `split()` w Pythonie
Poniżej przedstawiono ogólną strukturę wywołania metody `split()` w odniesieniu do dowolnego poprawnego ciągu znaków w Pythonie:
string.split(sep, maxsplit) # Parametry: sep, maxsplit # Wynik: Lista łańcuchów
W powyższym zapisie, `string` oznacza dowolny prawidłowy łańcuch znaków w Pythonie.
Zarówno parametr `sep`, jak i `maxsplit` są opcjonalne.
- `sep` to separator, względem którego chcemy podzielić łańcuch. Powinien być on zdefiniowany jako ciąg znaków.
- `maxsplit` to liczba całkowita, która określa, ile razy ma zostać dokonany podział łańcucha.
Jeśli nie określimy tych parametrów, użyte zostaną ich wartości domyślne.
- Gdy nie zdefiniujemy wartości parametru `sep`, jako separatora zostanie użyty biały znak.
- Gdy nie podamy wartości dla parametru `maxsplit`, domyślnie przyjmie on wartość -1. Oznacza to, że podział łańcucha nastąpi przy każdym wystąpieniu separatora.
Upraszczając, działanie metody można opisać tak:
Metoda `split()` dzieli ciąg znaków maksymalnie `maxsplit` razy, korzystając z separatora zdefiniowanego przez parametr `sep`.
Po omówieniu składni metody `split()`, przejdźmy do praktycznych przykładów.
Rozdzielenie tekstu w Pythonie na listę łańcuchów
Jeśli masz zainstalowanego Pythona w wersji 3, możesz samodzielnie wykonywać kody przedstawione w tym poradniku, korzystając z interpretera REPL Pythona.
Aby uruchomić REPL, w terminalu wprowadź jedno z poniższych poleceń:
$ python $ python -i
Zachęcamy również do przetestowania tych przykładów w edytorze Python dostępnym na newsblog.pl.
W tym przykładzie, `py_str` to łańcuch znaków. Wywołajmy metodę `.split()` na `py_str` bez żadnych parametrów i zobaczmy, jaki będzie efekt.
py_str = "Naucz się jak używać split() w Pythonie" py_str.split() # Wynik ['Naucz', 'się', 'jak', 'używać', 'split()', 'w', 'Pythonie']
Jak widać, łańcuch został podzielony w miejscach występowania białych znaków.
Dzielenie ciągu znaków w Pythonie na podstawie separatorów
#1. Na początku, spróbujmy podzielić ciąg `py_str`, używając podwójnych podkreśleń (`__`) jako separatora.
py_str = "Wszystko__co__najlepsze" py_str.split(sep='__') # Wynik ['Wszystko', 'co', 'najlepsze']
#2. Rozważmy inny przykład. `py_str` składa się z trzech zdań, każde zakończone kropką (`.`).
py_str = "Uwielbiam programowanie. Python jest świetny. Uczę się Pythona w 2022" py_str.split(sep='.') # Wynik ['Uwielbiam programowanie', ' Python jest świetny', " Uczę się Pythona w 2022"]
Po wywołaniu metody `.split()` na tym łańcuchu, z kropką `.` jako separatorem, otrzymana lista zawiera trzy zdania, co widać w powyższym bloku kodu.
#3. Zadajmy kilka pytań:
- Co się stanie, gdy separator nie wystąpi w łańcuchu?
- Jak w takiej sytuacji przebiegnie podział?
Oto przykład:
Spróbujmy podzielić `py_str` w miejscu występowania gwiazdki
py_str = "Ten wiersz nie zawiera gwiazdki." py_str.split(sep='*') # Wynik ['Ten wiersz nie zawiera gwiazdki.']
—która nie występuje.
W tym przypadku, podział nie jest możliwy, w efekcie czego, lista zawiera cały, niepodzielony łańcuch.
W następnej sekcji pokażemy, jak zastosować metodę `split()` do zawartości pliku tekstowego.
Podział zawartości pliku w Pythonie
Podczas pracy z plikami tekstowymi w Pythonie, często konieczne jest podzielenie zawartości pliku w oparciu o określony separator, aby ułatwić dalsze przetwarzanie danych.
Oto przykładowy plik tekstowy:
with open('sample.txt') as f: content = f.read() str_list= content.split(sep='...') for string in str_list: print(string,end='')
Poniższy fragment kodu ilustruje, jak dokonać podziału na podstawie zawartości przykładowego pliku tekstowego.
- Powyższy kod wykonuje następujące czynności:
- Za pomocą menedżera kontekstu `with` otwiera plik tekstowy o nazwie „sample.txt” i operuje na nim.
- Odczytuje całą zawartość pliku za pomocą metody `.read()` na obiekcie pliku `f`.
- Dzieli zawartość w miejscach wystąpienia wielokropka (…) jako separatora, zapisując wynik w liście `str_list`.
Następnie, iteruje po liście `str_list`, by uzyskać dostęp do każdego fragmentu tekstu i go wyświetlić.
# Wynik To jest przykładowy plik tekstowy Zawiera informacje o Rozpoczęciu przygody z <a href="https://newsblog.pl.com/pcap-certification/">programowaniem w Pythonie</a> Zgodnie z ankietą StackOverflow Developer Survey 2022 Python jest jednym z najbardziej lubianych języków programowania Więc na co czekasz? Zacznij naukę!
Oto rezultat.
Możesz samodzielnie przetestować podział zawartości pliku tekstowego, używając dowolnego separatora.
Dzielenie łańcucha w Pythonie na części
Po jednokrotnym podzieleniu ciągu, uzyskujemy dwa fragmenty. Podzielenie go dwukrotnie, da nam trzy części.
Generalizując, po podzieleniu ciągu K razy, otrzymamy K + 1 fragmentów.
Ilustruje to poniższy schemat.
W jaki sposób działa parametr maxsplit (zdjęcie autora)
py_str = "Część#1 Jestem większą częścią, Część#2" py_str.split(maxsplit=1) # Wynik ['Część#1', "Jestem większą częścią, Część#2"]
#1. Parametr `maxsplit` ustawiliśmy na 1. Nie wskazaliśmy separatora, w związku z czym podział nastąpi na białych znakach.
Pomimo, że druga część listy zawiera spacje, podział nie zachodzi, ponieważ jego liczbę kontroluje teraz wartość `maxsplit` równa 1.
py_str = "Część#1 Część#2 Jestem dużą Częścią#3, mimo że zawieram białe znaki" py_str.split(maxsplit=2) # Wynik ['Część#1', 'Część#2', "Jestem dużą Częścią#3, mimo że zawieram białe znaki"]
#2. Zwiększmy wartość `maxsplit` do 2 i obserwujmy, jak zachodzi podział w poniższym przykładzie.
Podobnie jak w poprzednim przykładzie, wartość `maxsplit` decyduje o liczbie wykonanych podziałów. Uzyskujemy trzy fragmenty, które powstały po pierwszym i drugim wystąpieniu spacji.
#3. Co się stanie, jeśli ustawimy `maxsplit` na wartość większą od liczby wystąpień separatora?
py_str = "Tutaj, jest, tylko, 4, przecinki" py_str.split(maxsplit=8) # Wynik ['Tutaj,', 'jest,', 'tylko,', '4,', 'przecinki']
W poniższym kodzie ustawiamy `maxsplit` na 8, podczas gdy łańcuch zawiera tylko cztery przecinki.
W takiej sytuacji, metoda split podzieli `py_str` w każdym z czterech wystąpień przecinka. Nawet jeśli ustawimy `maxsplit` na wartość mniejszą niż -1, np. -7, podział i tak zostanie wykonany we wszystkich miejscach wystąpienia separatora.
Teraz, podsumujmy to, czego się nauczyliśmy i użyjmy obu parametrów `sep` i `maxsplit`.
Podział łańcucha w Pythonie na fragmenty przy użyciu separatora
py_str = "Część#1, Część#2, Jestem dużą Częścią#3, mimo że zawieram ," py_str.split(sep = ',',maxsplit=2) # Wynik ['Część#1', ' Część#2', " Jestem dużą Częścią#3, mimo że zawieram ,"]
#1. Załóżmy, że chcemy podzielić `py_str` na trzy części, w miejscu wystąpienia przecinka (,). Aby to zrobić, możemy ustawić wartość `sep` na ’,’ i wartość `maxsplit` na 2 w wywołaniu metody.
Jak widać w wynikach, podział nastąpił dwukrotnie, przy pierwszych dwóch wystąpieniach separatora.
#2. Separator `sep` nie musi być pojedynczym znakiem. Może to być sekwencja znaków, takich jak podwójne podkreślenia, użyte wcześniej, a nawet podłańcuch.
py_str = "Musisz nauczyć się struktur danych, nauczyć algorytmów i uczyć się więcej!" py_str.split(sep = 'nauczyć',maxsplit=2) # Wynik ['Musisz ', ' się struktur danych, ', ' algorytmów i uczyć się więcej!']
Ustawmy łańcuch 'nauczyć’ jako argument `sep` i zobaczmy, jak podział zachodzi dla różnych wartości `maxsplit`. Tutaj ustawiamy `maxsplit` na 2.
py_str = "Musisz nauczyć się struktur danych, nauczyć algorytmów i uczyć się więcej!" py_str.split(sep = 'nauczyć',maxsplit=-1) # Wynik ['Musisz ', ' się struktur danych, ', ' algorytmów i ', ' się więcej!']
#3. Jeżeli chcemy podzielić `py_str` w każdym miejscu wystąpienia słowa „nauczyć”, możemy wywołać metodę `.split()`, definiując `sep` jako „nauczyć” – bez definiowania parametru `maxsplit`. Jest to tożsame z ustawieniem wartości parametru `maxsplit` na -1, co pokazano w poniższym kodzie.
Widać, że podział następuje we wszystkich miejscach występowania słowa „nauczyć”.
Podsumowanie
Mam nadzieję, że teraz w pełni rozumiesz, jak działa metoda `.split()` w odniesieniu do łańcuchów znaków w Pythonie.
- Oto krótkie podsumowanie tego poradnika:
- Wbudowana metoda `.split()` w Pythonie dzieli łańcuch znaków na listę mniejszych łańcuchów.
- Użyj `string.split()` aby dokonać podziału łańcucha na podstawie wszystkich wystąpień domyślnego separatora, którym są białe znaki.
Użyj `string.split(sep,maxsplit)`, by podzielić ciąg maksymalnie `maxsplit` razy, w miejscach wystąpienia separatora `sep`. W rezultacie otrzymamy listę zawierającą `maxsplit + 1` elementów.
W kolejnym kroku możesz dowiedzieć się, jak sprawdzić, czy łańcuchy znaków w Pythonie są palindromami lub anagramami.
newsblog.pl