Django-Admin.ru

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

Метод split в Python: разделение строки по пробелам и разделителю, maxsplit, rsplit, splitlines, разбор ввода через map(int, input().split()) и re.split.

Редакция Django-Admin.ru
· обновлено · 7 мин чтения

Содержание · 13 разделов
  1. Синтаксис str.split
  2. split без аргументов: деление по пробелам
  3. split с разделителем
  4. maxsplit: ограничить число разбиений
  5. rsplit: разделение справа
  6. splitlines: разделение по строкам
  7. Разбор ввода: map(int, input().split())
  8. Разделение по нескольким разделителям: re.split
  9. Практические примеры
  10. Убрать пробелы вокруг частей
  11. Строка «ключ=значение» в словарь
  12. Посчитать слова в тексте
  13. Похожие задачи
  14. Частые ошибки
  15. Числа остались строками
  16. AttributeError: ‘list’ object has no attribute ‘split’
  17. ValueError: empty separator
  18. split(” ”) вместо split()
  19. Частые вопросы
  20. Как разбить строку на части одинаковой длины?
  21. Как разделить число на цифры?
  22. Как взять только последнюю часть после разделителя?
  23. Как разделить строку по заглавным буквам?
  24. Как разделить строку с учётом кавычек?
  25. Итог

Метод split() в Python разбивает строку на части и возвращает список строк. Короткий ответ: "a b c".split() делит по пробелам и вернёт ['a', 'b', 'c'], а "a,b,c".split(",") делит по запятой. Исходная строка не меняется — строки в Python неизменяемы.

Ниже — как работает split() с разделителем и без него, параметр maxsplit, методы rsplit() и splitlines(), разбор пользовательского ввода и деление строки сразу по нескольким разделителям. Примеры проверены на Python 3.12.

Синтаксис str.split

str.split(sep=None, maxsplit=-1)
  • sep — разделитель (строка из одного или нескольких символов). Если не указан или None — строка делится по любым пробельным символам.
  • maxsplit — сколько разбиений сделать максимум. -1 (по умолчанию) — без ограничений.

split без аргументов: деление по пробелам

Без аргументов split() считает разделителем любую последовательность пробелов, табуляций и переводов строк, а пробелы по краям отбрасывает:

text = "  Python   это\tпросто \n"
print(text.split())  # → ['Python', 'это', 'просто']
print("".split())    # → []

Это самый удобный режим для слов и чисел, введённых через пробел.

split с разделителем

Если передать sep, строка делится строго по нему — каждое вхождение даёт границу:

print("2026-10-09".split("-"))     # → ['2026', '10', '09']
print("a, b, c".split(", "))       # → ['a', 'b', 'c']
print("key=value=x".split("="))    # → ['key', 'value', 'x']
print("a,,b,".split(","))          # → ['a', '', 'b', '']
print("one  two".split(" "))       # → ['one', '', 'two']

Обратите внимание на два последних примера: с явным разделителем пустые части не удаляются. Два пробела подряд при split(" ") дают пустую строку, а split() без аргументов — нет. Если нужно убрать пустые элементы, отфильтруйте их: [part for part in s.split(",") if part].

Ещё одно отличие: пустая строка с явным разделителем возвращает список с одной пустой строкой.

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

maxsplit: ограничить число разбиений

maxsplit пригодится, когда нужна только первая часть строки, а остальное — целиком:

line = "ERROR 2026-10-09 Не удалось подключиться к базе"
level, date, message = line.split(maxsplit=2)
print(level)    # → ERROR
print(message)  # → Не удалось подключиться к базе

print("a:b:c:d".split(":", 1))  # → ['a', 'b:c:d']

rsplit: разделение справа

rsplit() работает так же, но отсчитывает maxsplit с конца строки. Без maxsplit результат совпадает со split().

path = "media/uploads/2026/photo.final.jpg"
print(path.rsplit("/", 1))  # → ['media/uploads/2026', 'photo.final.jpg']
print("photo.final.jpg".rsplit(".", 1))  # → ['photo.final', 'jpg']

Для путей и расширений файлов надёжнее модуль pathlib: Path(path).suffix вернёт '.jpg'. Но для простых строк rsplit — быстрый способ отделить последнюю часть.

splitlines: разделение по строкам

splitlines() делит текст по переводам строк и понимает все варианты: \n, \r\n (Windows) и другие.

text = "первая\r\nвторая\nтретья\n"
print(text.splitlines())   # → ['первая', 'вторая', 'третья']
print(text.split("\n"))    # → ['первая\r', 'вторая', 'третья', '']
print(text.splitlines(keepends=True))  # → ['первая\r\n', 'вторая\n', 'третья\n']

split("\n") оставляет \r в строках из Windows-файлов и пустую строку в конце, поэтому для текста используйте splitlines().

Разбор ввода: map(int, input().split())

Классика олимпиадных задач и учебных упражнений — ввод нескольких чисел в одной строке. input() возвращает строку, split() делит её на части, а map применяет int к каждой:

# ввод: 3 5
a, b = map(int, input().split())
print(a + b)  # → 8

Список чисел произвольной длины:

# ввод: 3 5
numbers = list(map(int, input().split()))
print(numbers)  # → [3, 5]

То же через генератор списка: [int(x) for x in input().split()]. Если числа введены через запятую, передайте разделитель: input().split(",").

Количество переменных слева должно совпадать с количеством частей, иначе будет ошибка:

a, b = "1 2 3".split()  # → ValueError: too many values to unpack (expected 2)

Разделение по нескольким разделителям: re.split

str.split() принимает только один разделитель. Если частей отделяют то запятые, то точки с запятой, то пробелы, используйте re.split() из модуля re:

import re

text = "яблоки, груши;сливы  вишня"
print(re.split(r"[,;\s]+", text))  # → ['яблоки', 'груши', 'сливы', 'вишня']
print(re.split(r"\s*[,;]\s*", "a , b;c"))  # → ['a', 'b', 'c']
print(re.split(r"(\d+)", "abc12def3"))  # → ['abc', '12', 'def', '3', '']

Шаблон [,;\s]+ означает «один или больше символов из набора». Если обернуть шаблон в скобки (группу), разделители попадут в результат — как в последнем примере. Ограничить число разбиений можно аргументом maxsplit=.

Практические примеры

Убрать пробелы вокруг частей

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

raw = " Python , Django ,FastAPI "
print(raw.split(","))  # → [' Python ', ' Django ', 'FastAPI ']
print([tag.strip() for tag in raw.split(",")])  # → ['Python', 'Django', 'FastAPI']

Строка «ключ=значение» в словарь

settings = "host=localhost;port=5432;debug=true"
config = dict(pair.split("=", 1) for pair in settings.split(";"))
print(config)  # → {'host': 'localhost', 'port': '5432', 'debug': 'true'}

maxsplit=1 защищает от значений, внутри которых тоже есть =. Подробнее о работе с результатом — в статье о словарях Python.

Посчитать слова в тексте

text = "Красивое лучше, чем уродливое. Явное лучше, чем неявное."
words = text.lower().split()
print(len(words))  # → 8
print(words.count("лучше,"))  # → 2

Знаки препинания остаются приклеенными к словам. Если они мешают, делите текст через re.findall(r"\w+", text) — шаблон вернёт только слова.

Похожие задачи

  • Строка в список символов — list("abc") вернёт ['a', 'b', 'c']; split() делит только по разделителю и для этого не подходит.
  • Разделить один раз и сохранить разделитель — "key=value".partition("=") вернёт кортеж ('key', '=', 'value').
  • Обратная операция — собрать список обратно в строку: " ".join(words). Подробно — в статье о методе join.
  • CSV-файлы с кавычками и запятыми внутри значений разбирайте модулем csv, а не split(",").
words = "мама мыла раму".split()
print("-".join(words))  # → мама-мыла-раму
print("key=value".partition("="))  # → ('key', '=', 'value')

Частые ошибки

Числа остались строками

split() всегда возвращает строки. Сложение «чисел» после него склеивает текст:

a, b = "2 3".split()
print(a + b)  # → 23
print(int(a) + int(b))  # → 5

Преобразуйте части через int()/float() или map(int, ...).

AttributeError: ‘list’ object has no attribute ‘split’

split() — метод строки. Ошибка значит, что вы вызвали его у списка, например повторно у результата split() или у списка строк из readlines(). Делите каждую строку отдельно:

lines = ["a b", "c d"]
print([line.split() for line in lines])  # → [['a', 'b'], ['c', 'd']]

ValueError: empty separator

"abc".split("")  # → ValueError: empty separator

Пустой разделитель недопустим. Чтобы разбить строку на символы, используйте list("abc").

split(” ”) вместо split()

При нескольких пробелах подряд split(" ") возвращает пустые строки, а пробелы по краям тоже дают пустые элементы. Для слов почти всегда нужен split() без аргументов.

Остальные ошибки и их разбор — в статье о traceback и ошибках Python.

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

Как разбить строку на части одинаковой длины?

У split() такого режима нет — нарежьте строку срезами с шагом. Последний кусок может оказаться короче:

s = "abcdefgh"
n = 3
print([s[i:i + n] for i in range(0, len(s), n)])  # → ['abc', 'def', 'gh']

Чтобы перенести текст по словам с ограничением ширины строки, используйте textwrap.wrap(text, width).

Как разделить число на цифры?

У числа нет метода split(). Превратите его в строку, а каждый символ обратно в int:

print(list(map(int, str(2026))))  # → [2, 0, 2, 6]

Как взять только последнюю часть после разделителя?

Возьмите последний элемент списка индексом -1. rsplit() с maxsplit=1 отделяет только последнюю часть и не режет остальную строку:

url = "https://example.com/media/photo.jpg"
print(url.split("/")[-1])      # → photo.jpg
print(url.rsplit("/", 1)[-1])  # → photo.jpg

Как разделить строку по заглавным буквам?

Для имён в стиле CamelCase подходит re.findall(): шаблон находит заглавную букву и следующие за ней строчные буквы и цифры.

import re

print(re.findall(r"[A-Z][a-z0-9]*", "UserProfileV2"))  # → ['User', 'Profile', 'V2']

Как разделить строку с учётом кавычек?

split() разрежет фразу в кавычках по пробелам. Для командной строки и похожих форматов есть shlex.split() — текст в кавычках остаётся одним элементом:

import shlex

print(shlex.split('copy "мои файлы/отчёт.txt" backup'))  # → ['copy', 'мои файлы/отчёт.txt', 'backup']

Итог

split() превращает строку в список: без аргументов — по пробелам с отбрасыванием пустых частей, с sep — строго по разделителю. Для текста по строкам берите splitlines(), для нескольких разделителей — re.split(), а для чисел из ввода — map(int, input().split()). Что делать со списком дальше, рассказано в статье о списках в Python, а остальной синтаксис собран в шпаргалке по Python.

  • #Python
  • #split
  • #Строки
  • #Синтаксис
↑ ↓ выборEnter открытьEsc закрыть