Как разбить строку по разделителю и снова склеить в Python?
Есть строка с данными через запятую, типа 'яблоко,банан,вишня'. Хочу получить из неё список, поработать с ним, а потом собрать обратно в строку, но уже через другой разделитель. Как работают split и join?
2 ответа
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, разделитель должен быть слева.
Если нужно разбить по строкам (по переводам строк), а не по запятой — берите splitlines(), он умнее обычного split('\n'):
text = 'строка1\nстрока2\nстрока3'
lines = text.splitlines() # ['строка1', 'строка2', 'строка3']
Он корректно обрабатывает разные стили перевода строк (\n, \r\n) и не оставляет пустого элемента в конце, в отличие от split('\n'). Для построчной обработки текста это надёжнее.