Python: уроки, справочник и задачи

split() в Python: разбиение строки по разделителю

Раздел: Строки в Python · Обновлено 31.10.2026

Метод split() в Python делит строку на части по разделителю и возвращает список подстрок. В статье разобраны параметры sep и maxsplit, разница между вызовом без аргументов и с пробелом, а также альтернативы: rsplit(), splitlines(), partition() и re.split() для нескольких разделителей сразу.

split() в Python: разбиение строки по разделителю
Фото: CIPHR Connect / CC BY 2.0, Wikimedia Commons
Содержание статьи
  1. Синтаксис и параметры
  2. Разделение по пробелам
  3. Свой разделитель
    1. Пустые строки при явном разделителе
  4. Параметр maxsplit и метод rsplit
  5. Другие способы разбить строку
    1. splitlines для многострочного текста
    2. partition для разделения на две части
    3. re.split для нескольких разделителей
  6. Обратная операция и практика
  7. Частые вопросы
    1. Почему в результате split появились пустые строки?
    2. Можно ли передать в split несколько разделителей?
    3. Как разделить строку и сразу получить числа?
    4. Чем split отличается от rsplit?

Синтаксис и параметры

Метод вызывается у строки и принимает два необязательных параметра, их можно передавать по имени:

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

Результат всегда список строк. Исходная строка не меняется, потому что строки неизменяемы.

text = "Python is a fun programming language"
words = text.split()
print(words)       # ['Python', 'is', 'a', 'fun', 'programming', 'language']
print(len(words))  # 6

Разделение по пробелам

Вызов без аргументов и вызов с пробелом в качестве разделителя выглядят похоже, но работают по-разному. Это самая частая причина неожиданных пустых строк в результате.

s = "  a  b c "
print(s.split())     # ['a', 'b', 'c']
print(s.split(" "))  # ['', '', 'a', '', 'b', 'c', '']

Без аргументов split считает разделителем любую последовательность пробельных символов: пробелов, табуляций, переводов строки. Пробелы по краям при этом отбрасываются, пустых элементов не бывает. С явным разделителем " " каждый пробел режет строку отдельно, и между соседними пробелами появляется пустая строка.

ВызовПустые элементыКрая строкиТабуляция и \n
split()Не появляютсяОчищаютсяСчитаются разделителем
split(" ")ПоявляютсяДают пустые строкиНе считаются разделителем

Для разбора текста на слова почти всегда нужен вариант без аргументов.

Свой разделитель

В sep можно передать любой символ или строку. Разделитель целиком исчезает из результата.

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

date = "2025-03-15"
year, month, day = date.split("-")
print(year, month, day)     # 2025 03 15

Если разделитель не встречается, возвращается список из одной исходной строки. Распаковка в переменные удобна, но при другом количестве частей вызовет ValueError, поэтому применяйте ее только к данным с известным форматом.

Пустые строки при явном разделителе

Два разделителя подряд или разделитель на краю дают пустой элемент. Это полезно для CSV-подобных данных, где пустое поле означает отсутствие значения.

print("a,,b,".split(","))  # ['a', '', 'b', '']
print("".split(","))       # ['']
print("".split())          # []

Если пустые элементы не нужны, отфильтруйте их: [x for x in s.split(",") if x]. Пробелы вокруг частей удобно убрать методом strip(): [x.strip() for x in s.split(",")].

Параметр maxsplit и метод rsplit

Параметр maxsplit ограничивает число разрезов. После последнего разреза остаток строки попадает в список целиком, вместе с оставшимися разделителями.

grocery = "Молоко, Курица, Хлеб, Масло"
print(grocery.split(", ", maxsplit=1))  # ['Молоко', 'Курица, Хлеб, Масло']
print(grocery.split(", ", maxsplit=2))  # ['Молоко', 'Курица', 'Хлеб, Масло']
print(grocery.split(", ", maxsplit=0))  # ['Молоко, Курица, Хлеб, Масло']

Метод rsplit() принимает те же параметры, но режет строку справа налево. Разница видна только при заданном maxsplit. Типичная задача - отделить расширение файла, когда в имени несколько точек:

name, ext = "archive.tar.gz".rsplit(".", maxsplit=1)
print(name, ext)  # archive.tar gz

Другие способы разбить строку

Для некоторых задач у строк и стандартной библиотеки есть более подходящие инструменты.

splitlines для многострочного текста

Метод делит текст по переводам строк любого типа: \n, \r\n, \r. В отличие от split("\n"), он не оставляет пустой элемент после последнего перевода строки.

text = "line1\nline2\r\nline3\n"
print(text.splitlines())  # ['line1', 'line2', 'line3']

partition для разделения на две части

Метод partition(sep) режет строку по первому вхождению и всегда возвращает кортеж из трех элементов: часть до разделителя, сам разделитель и часть после. Если разделителя нет, последние два элемента будут пустыми строками, поэтому распаковка не упадет.

key, _, value = "host=localhost=1".partition("=")
print(key, value)  # host localhost=1

re.split для нескольких разделителей

Обычный split принимает только один разделитель. Если в данных встречаются запятые, точки с запятой и пробелы вперемешку, используйте функцию re.split() из модуля re.

import re
print(re.split(r"[;,\s]+", "a; b,c  d"))  # ['a', 'b', 'c', 'd']

Чтобы разбить строку на отдельные символы, split не нужен: достаточно вызвать list("abc"), результат ['a', 'b', 'c'].

Обратная операция и практика

Собрать список строк обратно в одну строку помогает метод join(), он вызывается у разделителя. Подробно он описан в статье про join.

parts = "2025-03-15".split("-")
print(".".join(reversed(parts)))  # 15.03.2025

Частая учебная задача - прочитать несколько чисел, введенных через пробел в одной строке. split делит ввод на строки, а map(int, ...) превращает их в числа.

a, b = map(int, input().split())  # ввод: 3 7
print(a + b)  # 10

Полное описание параметров есть в документации Python.

Частые вопросы

Ответы на вопросы, которые чаще всего возникают при работе с split.

Почему в результате split появились пустые строки?

Разделитель указан явно, и в строке есть два разделителя подряд или разделитель на краю. Вызовите split без аргументов, если делите по пробелам, или отфильтруйте пустые элементы.

Можно ли передать в split несколько разделителей?

Нет, параметр sep принимает одну строку. Для нескольких вариантов используйте re.split() с набором символов в квадратных скобках или заранее замените все разделители на один через replace().

Как разделить строку и сразу получить числа?

Примените int к каждому элементу: list(map(int, s.split())) или генератор [int(x) for x in s.split()].

Чем split отличается от rsplit?

Без maxsplit результаты одинаковые. С maxsplit split начинает резать слева, а rsplit справа, поэтому неразрезанный остаток оказывается в начале списка.