Функция split() в Python: как разделить строку на части
Безжалостно кромсаем строки в Python.


Иллюстрация: Оля Ежак для Skillbox Media
Строки в Python бывают очень длинными и часто содержат много лишних данных. Например, служебную информацию в лог-файлах приложений или ошибки пользовательского ввода. Чтобы получить из строки то, что действительно нужно, иногда её лучше разделить на части. Сделать это можно с помощью функции split(). Разбираем её синтаксис и возможности в этой статье.
Содержание
Что делает функция split() в Python
split() — функция в Python, которую используют для разделения строки на несколько частей. Она полезна, когда надо проанализировать текст или, например, получить данные из CSV-файлов и логов.
Базовый синтаксис функции split() выглядит так:
str.split(sep=None, maxsplit=--1)
В примере выше:
- sep — разделитель, по которому разбивается исходная строка. По умолчанию или при указании None разделителями будут считаться любые пробельные символы (пробел, перевод строки, табуляция и другие).
- maxsplit — параметр, который определяет максимальное количество разбиений. По умолчанию (или если указано -1) строка разбивается полностью на все возможные подстроки.

Читайте также:
Как разделить строку в Python
Рассмотрим способы разделения строк с помощью функции split().
По пробелу
Самый частый кейс использования split () — разделение строки по пробелу. Для этого при вызове функции не надо указывать разделитель sep. Для примера создадим строку с перечислением имён через запятую, а после этого разделим её по пробелу и выведем результат в консоль с помощью print():
# Строка, которую нужно разделить
str = 'Коля, Даша, Инна, Дима, Рома, Наташа'
print(str.split())
# Результат:
# ['Коля,', 'Даша,', 'Инна,', 'Дима,', 'Рома,', 'Наташа']
В итоге мы получили список подстрок, но важно отметить, что запятые остались рядом с именами. Это происходит из-за того, что мы разделяли строку по пробелам, а запятые — такие же символы, как буквы. Поэтому функция split() не удалила их.
Если использовать в строке символ табуляции (\t) и перевода строки (\n), то результат не изменится. Всё из-за того, что табуляция и перевод строки относятся к пробельным символам:
# Строка, которую нужно разделить
str = 'Коля\nДаша\tИнна, Дима\nРома\nНаташа'
print(str.split())
# Результат:
#['Коля', 'Даша', 'Инна,', 'Дима', 'Рома', 'Наташа']

Читайте также:
По запятой или другому символу
Для разделения строки по запятой или любому другому символу в качестве аргумента функции split() можно указать разделитель. Для примера создадим строку с названиями животных на английском языке и разделим её по запятой. В итоге получим список, состоящий из отдельных слов:
# Строка, которую нужно разделить
str = 'bear,pig,rabbit,donkey,owl,tiger,kangaroo'
print(str.split(','))
# Результат:
# ['bear', 'pig', 'rabbit', 'donkey', 'owl', 'tiger', 'kangaroo']
В качестве разделителя можно использовать любые другие символы. В примере ниже мы разделяем строку по символу звёздочки *. Если разделитель встречается несколько раз подряд, то Python создаёт пустые строки:
# Строка, которую нужно разделить
str = 'abc*de***frrd*18'
print(str.split('*'))
# Результат:
# ['abc', 'de', '', '', 'frrd', '18']
По последовательности символов
Иногда строки содержат в себе уже готовые разделители в виде комбинаций символов. В таком случае функции split() можно передать последовательность.
В примере ниже есть строка text с данными анкеты пользователя, поля которой разделены с помощью двойного символа решётки (##). Передадим эту последовательность в split() и получим на выходе список подстрок в формате «ключ — значение»:
# Строка, которую нужно разделить
text = "имя: Александр##фамилия: Кузнецов##возраст:30##город: Москва"
# Использование split() для разделения строки
parts = text.split("##")
print(parts)
# Вывод результата
# ['имя: Александр', 'фамилия: Кузнецов', 'возраст:30', 'город: Москва']

Читайте также:
По нескольким разделителям
С помощью регулярных выражений строку можно разбить по нескольким символам или последовательностям одновременно. Например, если надо выполнить разделение по запятой, точке, вопросительному знаку, пробелу и переносу строки, то следует передать в split() регулярное выражение r'[,.?\n ]+', в котором:
- квадратные скобки [] используются для указания набора символов, каждый из которых может быть разделителем;
- внутри скобок перечислены символы-разделители: запятая ,, точка ., вопросительный знак ?, перенос строки \n, пробел ‘ ’;
- знак + после квадратных скобок означает, что разделитель может включать один или несколько символов из набора.
Для работы с регулярными выражениями надо импортировать модуль re, а функция разделения строки будет выглядеть как re.split(r'[,.\n? ]+', text). В качестве первого аргумента следует передать регулярное выражение, а в качестве второго — разделяемую строку:
# Импортируем библиотеку
import re
#Текст, который нужно разделить
text = "One,two,three,four.\nCan I have\na little more?|"
# Используем re.split c регулярным выражением для разделения строки
parts = re.split(r'[,.\n? ]+', text)
print(parts)
# Вывод результата
# ['One', 'two', 'three', 'four', 'Can', 'I', 'have', 'a', 'little', 'more', '|']
Ограничение количества разбиений
В качестве второго аргумента в функцию split() можно передать значение параметра maxsplit, который определяет максимальное количество разделений. Например, если указать maxsplit=3, то Python разделит строку 3 раза, а в результате будет 4 (maxsplit+1) элемента. По умолчанию значение maxsplit равняется -1, а разделение происходит столько раз, сколько возможно.
Для примера разделим строку по слешу только два раза. После второго разделения Python вернёт оставшуюся часть строки без изменений:
text = "one/two/three/four"
parts = text.split('/', maxsplit=2)
print(parts)
# Вывод: ['one', 'two', 'three/four']

Читайте также:
В заключение
Функция split() — удобный инструмент для парсинга данных, чтения файлов и обработки пользовательского ввода. С её помощью можно быстро разделить строку на элементы для дальнейшей работы.
Функция поддерживает разделение строк по фиксированным символам и по шаблонам с использованием регулярных выражений. Параметр maxsplit позволяет ограничить количество получаемых подстрок.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!