Как разбить строку: split в питоне и соседние методы

Метод split в питоне разбивает строку и возвращает список частей. Без аргументов он использует пробельные символы. Параметр sep задает разделитель, а maxsplit ограничивает число разбиений.

Вы увидите пустые элементы, ошибки и отличия соседних методов.

Функция split python: синтаксис и вызов

str.split(sep=None, maxsplit=-1)

Вызовите метод у строки, которую хотите разделить:

text = 'Love thy neighbor'
print(text.split())
# ['Love', 'thy', 'neighbor']

Оба параметра необязательны. Вызов без аргументов тоже работает.

Подробности о методе собраны в документации str.split().

Метод split Python: разделитель и maxsplit

Метод принимает не более двух параметров:

  • sep – строка-разделитель. При значении None метод объединяет соседние пробельные символы.
  • maxsplit – максимальное число разбиений. Результат содержит до maxsplit + 1 элементов.

Значение maxsplit=-1 снимает ограничение. Метод использует его по умолчанию.

Разделитель может состоять из нескольких символов. Метод ищет всю последовательность целиком.

Связка map int input split полезна, когда значения из строки нужно сразу преобразовать в целые числа.

grocery = 'Milk, Chicken, Bread'
print(grocery.split(', '))
# ['Milk', 'Chicken', 'Bread']

Метод не считает разделитель регулярным выражением. Шаблон обрабатывает функция re.split().

Результат split() и значение maxsplit

split() возвращает список строк. Порядок частей сохраняется.

Исходная строка при этом не меняется. Строки в Python неизменяемы.

Разбиение строки без ограничения

grocery = 'Milk, Chicken, Bread'

print(grocery.split(', '))
print(grocery.split(':'))
['Milk', 'Chicken', 'Bread']
['Milk, Chicken, Bread']

Второй вызов не нашел двоеточие. Поэтому список получил один элемент.

Ограничение числа разбиений

grocery = 'Milk, Chicken, Bread, Butter'

print(grocery.split(', ', 2))
print(grocery.split(', ', 1))
print(grocery.split(', ', 5))
print(grocery.split(', ', 0))
['Milk', 'Chicken', 'Bread, Butter']
['Milk', 'Chicken, Bread, Butter']
['Milk', 'Chicken', 'Bread', 'Butter']
['Milk, Chicken, Bread, Butter']

При maxsplit=2 метод делит строку два раза. Остаток остается последним элементом.

Значение 5 не добавляет лишние части. В строке только три разделителя.

При явном разделителе maxsplit=0 отключает разбиение. Строка возвращается одним элементом.

Пустые элементы и ошибки split()

Пустые элементы зависят от того, вызывается ли split() без аргументов или с явным пробелом; пустая строка и пустой разделитель требуют отдельной обработки, а распаковка — проверки числа частей. Учитывайте смысл пустых полей и структуру входной строки при выборе способа обработки.

Разница между split() и split(' ')

Вызов без аргумента объединяет соседние пробелы. Пробелы по краям не создают пустых элементов.

Перед разбиением иногда применяют strip(): strip Python убирает внешние пробелы, но не меняет разделители внутри строки.

print('  Milk\tChicken\nBread  '.split())
# ['Milk', 'Chicken', 'Bread']

print(' Milk  Bread '.split(' '))
# ['', 'Milk', '', 'Bread', '']

Разделитель ' ' означает один обычный пробел. Повторные пробелы дают пустые элементы.

Пустая строка и пустые поля

print(''.split())
# []

print(''.split(','))
# ['']

print(',Milk,,Bread,'.split(','))
# ['', 'Milk', '', 'Bread', '']

Явный разделитель сохраняет пустые поля. Так программа не теряет их позиции.

Фильтруйте пустые значения только при подходящей логике данных:

parts = ',Milk,,Bread,'.split(',')
parts = [part for part in parts if part != '']
print(parts)
# ['Milk', 'Bread']

Пустой разделитель и ValueError

Пустая строка не подходит для параметра sep. Такой вызов вызывает ValueError:

'Milk'.split('')
# ValueError: empty separator

Для пробелов используйте text.split(). Для отдельных символов применяйте list(text).

Ошибка при распаковке результата

Число переменных должно совпадать с числом элементов списка.

key, value = 'name'.split('=', 1)
# ValueError: not enough values to unpack (expected 2, got 1)

Сначала сохраните результат. Затем проверьте его длину:

parts = 'name=Anna'.split('=', 1)

if len(parts) == 2:
    key, value = parts
    print(key, value)
else:
    print('В строке отсутствует знак =')
# name Anna

Python string methods: чем отличаются split(), rsplit(), partition() и re.split()

Выбирайте метод по направлению поиска и типу результата.

МетодКогда использоватьРезультат
split()Разделить строку слева по обычному разделителюСписок строк
rsplit()Ограничить разбиение со стороны конца строкиСписок строк
partition()Отделить часть по первому разделителюКортеж из трех строк
re.split()Разделить строку по регулярному выражениюСписок строк

Когда нужен rsplit()

Метод rsplit() начинает поиск справа.

print('archive.backup.zip'.rsplit('.', 1))
# ['archive.backup', 'zip']

Такой вызов отделяет расширение файла. Метод split() при том же ограничении отделил бы имя слева.

Когда нужен partition()

partition() всегда возвращает три строки. Вторая строка содержит найденный разделитель.

print('name=Anna'.partition('='))
# ('name', '=', 'Anna')

print('name'.partition('='))
# ('name', '', '')

Метод удобен для пары «ключ – значение». Проверка длины списка здесь не нужна.

Когда нужен re.split()

re.split() принимает регулярное выражение. Он подходит для нескольких разделителей.

import re

print(re.split(r'[,;]+', 'Milk;Chicken,,Bread'))
# ['Milk', 'Chicken', 'Bread']

Шаблон [,;]+ объединяет подряд идущие запятые и точки с запятой.

Какой метод выбрать для задачи

  • Обычный разделитель. Берите split().
  • Последний разделитель. Используйте rsplit().
  • Одна пара частей. Выбирайте partition().
  • Несколько вариантов разделителя. Применяйте re.split().

Перед фильтрацией проверьте смысл пустых элементов. Они могут обозначать пропущенные поля исходной записи.

Совет от нашей редакции: задавайте maxsplit, когда остаток строки нужно сохранить целиком.

Комментарии

Оставьте свой комментарий
Наталья П.

Благодарю! То есть строку, превращает в массив?

Interes O.

['Milk', 'Chicken', 'Bread', 'Butter']
['Milk, Chicken, Bread, Butter']
вообще не понятно, а что там изменилось?

Алексей Д.

Обратите внимание на кавычки. На 1й строке это 4 разных элемента массива, а на 2й строке 1 элемент. Произошло слияние значений.