python split string funkce textové řetězce rozdělení
Jak rozdělit textové řetězce v Pythonu.
Bez řetězců to nejde
Ať už jste analytik nebo programátor, textovým řetězcům (string) se při svojí práci nevyhnete.
Řetězce mohou mít mnoho podob. Může to být nestrukturovaný text, uživatelská jména, popisy produktů, názvy sloupců v tabulkách nebo cokoli jiného.
Python samozřejmě manipulaci s textovými řetězci umožňuje. V porovnání s některými jinými jazyky navíc i docela jednoduchou.
Python split
Metoda split()
v jazyce Python slouží k rozdělení textového řetězce na menší části podle určitého oddělovače (separátoru).
Oddělovačem může být libovolný znak nebo několik znaků.
Když použijete split()
, říkáte Pythonu, aby rozdělil řetězec na jednotlivé části a uložil je do seznamu.
Každá část odpovídá jedné části řetězce mezi oddělovači.
Metoda split()
může mít různé varianty, kde můžete specifikovat vlastní oddělovač a také omezit počet rozdělení.
Tímto způsobem můžete přesněji řídit, jak chcete, aby byl řetězec rozdělen.
Použití metody split()
je užitečné při práci s textem, když chcete rozdělit věty na slova nebo oddělit hodnoty v souborech CSV a TSV.
Funkce nebo Metoda? Začátečníci obvykle nerozlišují mezi pythonovským názvoslovím jako je Funkce nebo Metoda. Krátce řečeno: metoda je funkce objektu. Více informací např. v tomto kurzu.
Základní použití
Metoda stringu split()
má 2 nepovinné parametry:
sep
- Oddělovač, podle kterého se provede rozdělení řetězce. Výchozí oddělovač je whitespace (nejběžněji mezera).maxsplit
- Maximální počet rozdělení. Výchozí nastavení je-1
, které znamená, že se pro rozdělení použijí všechny oddělovače.
Příklad 1
Vyzkoušejte si použití metody split()
.
Jednotlivé názvy ovoce jsou odděleny mezerou.
text = "Jablko Hruška Banán"
slova = text.split()
print(slova)
['Jablko', 'Hruška', 'Banán']
V tomto příkladu je řetězec rozdělen na seznam slov a jako výchozí oddělovač jsou použité mezery.
Python vrátí jednotlivé položky jako datový typ list
(seznam).
Příklad 2
Možná vás napadne, co se stane, když těch mezer bude mezi slovy víc?
Co když mezi slova dáte nejdříve 2 a 3 mezery a nakonec ještě přidáte 4 mezery?
Vyzkoušejte si to!
text = "Jablko Hruška Banán "
slova = text.split()
print(slova)
['Jablko', 'Hruška', 'Banán']
Python nedělá rozdíly mezi jedním nebo více oddělovači a slova rozdělí správně.
Vlastní oddělovač
V následujícím příkladu si vyzkoušíte použití vlastního oddělovače.
Příklad 3
text = "Jablko,Hruška,Banán"
ovoce = text.split(',')
print(ovoce)
['Jablko', 'Hruška', 'Banán']
V tomto příkladu je řetězec rozdělen na seznam jednotlivých položek a jako oddělovač je použitá čárka .
Příklad 4
Všimli jste si, že v předchozím příkladu není mezi čárkami žádná mezera? V praxi se ale běžně setkáte s položkami, které jsou odděleny čárkou a mezerou. Co s tím?
Python naštěstí umožňuje funkce řetězit.
Proto se nejdřív zbavíme mezer pomocí stringové metody replace()
a pak použijeme metodu split()
.
text = "Jablko, Hruška, Banán"
ovoce = text.replace(' ', '').split(',')
print(ovoce)
['Jablko', 'Hruška', 'Banán']
Kontrolujeme počet rozdělení
V Pythonu nemusíte použít všechny oddělovače pro rozdělení řetězce.
V následujícím příkladu rozdělíte jen první 2 položky a zbytek necháte tak, jak je.
Příklad 5
Metoda split()
má k dispozici ještě druhý, nepovinný parametr maxsplit
.
Ten určuje maximální počet rozdělení.
text = "Jablko,Hruška,Banán,Třešeň,Švestka"
ovoce = text.split(',', 2)
print(ovoce)
['Jablko', 'Hruška', 'Banán,Třešeň,Švestka']
Rozdělení hodnot oddělených tabulátorem
Kopírujete někdy hodnoty z několika buněk v Excelu? Pokud ano, tak při vložení do jiné aplikace budou odděleny tabulátorem.
Jak si s takovými oddělovači poradí Python?
Příklad 6
text = "Jablko Hruška Banán"
ovoce = text.split("\t")
print(ovoce)
['Jablko', 'Hruška', 'Banán']
Protože je tabulátor speciální znak, je potřeba použít speciální syntaxi, aby Python pochopil, co po něm chcete.
Tabulátor se specifikuje pomocí \t
.
Tímto způsobem můžete snadno rozdělit řetězec na jednotlivé hodnoty v textovém souboru nebo v datech oddělených tabulátorem.
Hodnoty na více řádcích (ENTER)
Co když jsou hodnoty na samostatném řádku? Neboli, jsou odděleny Enterem?
Příklad 7
text = """Jablko
Hruška
Banán"""
ovoce = text.split('\n')
print(ovoce)
['Jablko', 'Hruška', 'Banán']
V předchozím příkladu jste použili víceřádkový textový řetězec (multiline string), který se v Pythonu zadává pomocí 3 uvozovek.
Jako oddělovač jste použili nový řádek, který se specifikuje pomocí \n
.
Tímto způsobem můžete snadno rozdělit víceřádkový řetězec, neboli hodnoty oddělené Enterem.
Více znaků
Hned v úvodu jsme si řekli, že parametr oddělovač (separátor), může obsahovat více znaků. Jak to funguje? Vyzkoušejte si následující příklad.
Příklad 8
data = "Jablko>>>Hruška>>>Banán"
hodnoty = data.split(">>>")
print(hodnoty)
['Jablko', 'Hruška', 'Banán']
Whitespace
Vzpomínáte si na první příklad, kde jste nezadávali žádný parametr a kde jednotlivé názvy ovoce oddělovaly jen mezery?
Je dobré vědět, že pokud metodě split()
nezadáte žádný parametr, tak Python bude používat jako oddělovač všechny tzv. whitespace znaky.
Tedy mezery, tabulátory a nové řádky.
Vyzkoušejte si to na posledním příkladu.
Příklad 9
text = """Jablko Hruška Banán
Třešeň"""
slova = text.split()
print(text)
print(slova)
Jablko Hruška Banán
Třešeň
['Jablko', 'Hruška', 'Banán', 'Třešeň']
Závěrem
O metodě split()
najdete informace také v dokumentaci Pythonu.
Pokud to s Pythonem myslíte vážně a uvažujete o kariéře datového analytika, vyzkoušejte prověřený kurz Data Analytics Pass.