Код
#статьи

Функция 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 позволяет ограничить количество получаемых подстрок.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована