← Все вопросы

Как разбить строку по разделителю и снова склеить в Python?

Задан 19 месяцев назад868 просмотров2 ответа
9

Есть строка с данными через запятую, типа 'яблоко,банан,вишня'. Хочу получить из неё список, поработать с ним, а потом собрать обратно в строку, но уже через другой разделитель. Как работают split и join?

2 ответа

12
✓ Принятый ответ — помог автору

split() режет строку на список, join() склеивает список обратно в строку. Они зеркальны друг другу:

text = 'яблоко,банан,вишня'
parts = text.split(',')        # ['яблоко', 'банан', 'вишня']

result = ' | '.join(parts)     # 'яблоко | банан | вишня'

Ключевой момент — у кого вызывается метод:

  • split(sep) вызывается у строки, аргумент это разделитель.
  • join(list) вызывается у строки-разделителя, а список передаётся в скобках. Поэтому пишут ' '.join(...), а не parts.join(' ').

Полезные нюансы split:

  • 'a b c'.split() без аргумента бьёт по любым пробелам и игнорирует лишние — удобно для текста.
  • 'a,b,c'.split(',', 1) со вторым аргументом ограничивает число разбиений: получится ['a', 'b,c'].

Главная ловушка join — он склеивает только строки. Если в списке числа, будет TypeError. Сначала превратите их в строки:

', '.join(str(x) for x in [1, 2, 3])   # '1, 2, 3'

Частая ошибка — parts.join(','). У списка нет метода join, разделитель должен быть слева.

4

Если нужно разбить по строкам (по переводам строк), а не по запятой — берите splitlines(), он умнее обычного split('\n'):

text = 'строка1\nстрока2\nстрока3'
lines = text.splitlines()   # ['строка1', 'строка2', 'строка3']

Он корректно обрабатывает разные стили перевода строк (\n, \r\n) и не оставляет пустого элемента в конце, в отличие от split('\n'). Для построчной обработки текста это надёжнее.

Ваш ответ

Войдите, чтобы ответить на вопрос.