split() в Python: разделение строки
Метод split в Python: разделение строки по пробелам и разделителю, maxsplit, rsplit, splitlines, разбор ввода через map(int, input().split()) и re.split.
Содержание · 13 разделов
- Синтаксис str.split
- split без аргументов: деление по пробелам
- split с разделителем
- maxsplit: ограничить число разбиений
- rsplit: разделение справа
- splitlines: разделение по строкам
- Разбор ввода: map(int, input().split())
- Разделение по нескольким разделителям: re.split
- Практические примеры
- Убрать пробелы вокруг частей
- Строка «ключ=значение» в словарь
- Посчитать слова в тексте
- Похожие задачи
- Частые ошибки
- Числа остались строками
- AttributeError: ‘list’ object has no attribute ‘split’
- ValueError: empty separator
- split(” ”) вместо split()
- Частые вопросы
- Как разбить строку на части одинаковой длины?
- Как разделить число на цифры?
- Как взять только последнюю часть после разделителя?
- Как разделить строку по заглавным буквам?
- Как разделить строку с учётом кавычек?
- Итог
Метод 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
- #Строки
- #Синтаксис