Jak używać metody split() w Pythonie?

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