Ввод с клавиатуры в python устроен таким образом, чтобы в переменную считывалось все, начиная от первого символа и заканчивая нажатием клавиши возврата каретки.
Это довольно удобно и практично, так как не будут потеряны важные пользовательские данные, но и немного неудобно. По сути, пользователь может ввести неизвестное количество слов, а программе нужны только первые два.
Для разделения используется функция split в питоне.
- Что такое split в Python
- Как разделить строку в Python
- Примеры разделения строки в Python
- Разделение сроки по пробелу
- Разделение строки по запятой
- Разделение, строк по нескольким разделителям
- Как работает параметр maxsplit в функции split?
- Как разделить строку посередине
- Метод str.rsplit()
- Параметры
- Описание и примеры
Что такое split в Python
Основная задача функции string.split в python – это возможность разбивать введенную строку по выбранному символу.
Допустим, пользователь вводит «Утро началось с крепкого кофе». Мы отправляем эти данные в функцию и в качестве разделителя выбираем знак пробела. На выходе функция возвращает список (не путать с массивом), состоящий из всех разделенных слов, в нашем случае это будет выглядеть следующим образом: «[‘Утро’, ‘началось’, ‘с’, ‘крепкого’, ‘кофе’]».
Как разделить строку в Python
Теперь, когда мы разобрались с теорией, перейдем к практике.
В полевых условиях пользователь редко вводит данные в идеальном для обработки виде. Потому сначала мы рекомендуем удалить все символы, которые могут помешать разделению (это дополнительная процедура, потому ее можно пропустить).
Первым делом необходимо запросить у пользователя исходные данные, а после удалить из нее все лишние символы.
Чтобы не вводить вручную, эти символы лучше поместить в одну строку, а после перебирать ее с помощью цикла.
В итоге это будет выглядеть следующим образом:
x = input("text:") # ввод текста с клавиатуры в переменную x
symbols = "!?,.'\"`;():" # список возможных "лишних" символов
for i in symbols: # перебор всех символов внутри строки symbols
x = x.replace(i, "") #замена текущего символа на пустое место
print(x) #вывод измененного текста, type:str
Теперь перейдем к самому основному пункту, а именно к разделению самой строки. Как мы помним, в python используется динамическая типизация данных, а потому не произойдет ничего страшного, если мы запишем список разделенных элементов в ту же переменную, где изначально была строка.
Делается это следующим образом (дополнение к предыдущему коду):
x = x.split(" ") # деление строки с разделителем в виде обычного пробела, используется шаблон string.split
print (x) # вывод разделенной и сохраненной в список строки, type: list
Для того, чтобы показать, что это действительно список, попробуем вывести первый элемент:
print("Первый элемент:", x[0]) #вывод первого элемента
Теперь проверим результат:

Выглядит даже лучше, чем хотелось изначально. По сути, на этом возможности функции заканчиваются (за исключением указания второго аргумента, но об этом чуть позже). Если вы до этого работали с этим языком, то могли заметить: метод split – это полная противоположность python функции join, которая, наоборот, склеивает список в строку (кстати, напишите в комментариях, какие функции и модули еще можно рассмотреть).
Примеры разделения строки в Python
Выше мы рассмотрели базовый случай, когда даже данные изначально готовятся к разделению. На практике, возможно, придется столкнуться с более неудобными условиями. Рассмотрим решение и для них.
Разделение сроки по пробелу
Ну, несмотря на то, что именно такой случай мы рассмотрели выше, закрепим освоенное на практических примерах. Допустим, у пользователя была простейшая база, где ячейки разделялись между собой с помощью обычного пробела. То есть одна запись в таблице представляет собой следующий текст:
«Тони Старк 53 “Мстители” Железный человек»
На выходе мы должны получить нормальную анкету.
Алгоритм действий (чтобы представить, как это будет выглядеть):
- Считать в переменную строку, введенную с клавиатуры.
- Разделить строку с помощью функции.
- Заполнить поля анкеты полученными данными.
- Вывести результат.
Переходим к реализации. К слову, если вы новичок, то запись словесных алгоритмов – это хороший способ натренировать мозг на задачки.
Код:
data = input("Введите данные:") # считывание данных
data = data.split(" ") # разделение и превращение строки в список
print("Имя:", data[0]) # обращение к первому элементу и т.д.
print("Фамилия:", data[1])
print("Возраст:", data[2])
print("Команда:", data[3])
print("Кличка:", data[4], data[5])
Проверяем результат в консоли и получаем:

Разделение строки по запятой
Теперь попробуем поменять разделитель. Представим, что у нас имеется Расписание, который нужно вывести в формате столбца, а не строки. Входные данные:
«Подъем, Разминка, Завтрак, Пробежка, Рабочая встреча, обед, Отбой».
Код для выполнения задачи:
day_time = input("Введите расписание через запятую:")
day_time = day_time.split(",") # разделение по запятой
z = 1 # счетчик, который позволит пронумеровать расписание
for i in day_time: # перебор списка
print(str(z), ")", i) # Вывод одного элемента списка
z += 1 # увеличение порядкового номера
Здесь вы заодно познакомитесь с конструкцией перебора списка, если раньше не знали о ней. Проверяем результат и вводим нужный текст.
То, что вышло, вы можете увидеть на картинке ниже.

Разделение, строк по нескольким разделителям
Довольно часто возникает необходимость разделить элемент по нескольким символам. Обычно, в таких случаях рекомендуется использовать регулярные выражения. Но, учитывая, что инструкций по «регуляркам» в интернете полно, мы предлагаем собственное решение (ну почти собственное).
Вернитесь к самому первому примеру, где лишние символы были заменены на пустоту. Так вот, их можно заменить на один единственный символ, который после станет разделителем.
Пример кода:
txt = input("Введите текст:")
txt = txt.replace(",", " ") # Превращаем все разделители в пробелы
txt = txt.replace(".", " ")
txt = txt.replace(" ", " ") # Делаем из всех двойных пробелов одинарные, ведь именно в этом месте и была замена
txt = txt.split(" ") # Разделяем строку

Звучит немного нелогично (еще и лишний элемент в конце появился). Да, это костыль, но он помогает избежать использования регулярных выражений.
Как работает параметр maxsplit в функции split?
Помимо основного аргумента, пользователь может указать, сколько раз необходимо заменить выбранный разделитель. Например, у нас есть строка: «Понедельник, вторник, среда, четверг, пятница, суббота, воскресенье». Мы хотим разделить только первые 5 дней, а субботу и воскресенье оставить вместе.
Это делается следующим кодом:
days = input("Введите дни: ")
days = days.split(", ", 5) # 5 раз убрать запятую
print(days)

Как разделить строку посередине
Иногда возникает необходимость найти центральный элемент, а после разделите по нему. У нас прекрасные новости, в таком случае не понадобится даже метод split.
Достаточно с помощью функции len определить размер, разделить его пополам, а после округлить в большую сторону (если размер нечетный). Да, будет использовать несколько новых функций, но они легкие.
text = input("Введите текст:")
middle = math.ceil(len(text) / 2) # ceil – это команда для округлени
print(text[:middle]) # первая часть
print(text[middle:]) #вторая часть

Метод str.rsplit()
В старых версиях питона не работала функция split, ее заменяла другая альтернатива – rsplit. Если быть точнее, то обе эти функции работают одинаково, просто одна из них устарела.
Параметры
Как и в обычном spilt, в rsplit можно передать два аргумента:
- Разделитель – символ, по которому произойдет разделение;
- Счетчик – сколько раз надо заменить символ.
Впрочем, никто не мешает использовать эту функцию вместо split и в Python 3.
Описание и примеры
Простой пример с разделением по пробелу с помощью rsplit.
text = input("text:")
text = text.rsplit(" ")
print(text)

Конечно, раз есть функция, то её можно использовать. Однако, мы рекомендуем придерживаться только стандартной split.