Python для сбора данных

Алла Тамбовцева, НИУ ВШЭ

Работа со строками: методы .split() и .join()

Для удобства будем работать с длинной строкой, которая представляет собой целую фразу.

In [1]:
st = "питон греется на солнышке"

Метод .split()

Возьмем строку st и разобьем её на отдельные слова по пробелу. Для этого нам понадобится метод .split():

In [27]:
st.split()
Out[27]:
['Питон', 'греется', 'на', 'солнышке.']

В скобках у .split() ничего не указано. Это означает, что строка будет разбиваться на части согласно настройкам по умолчанию, то есть по пробелу. Если бы мы хотели разбить строку по другому символу, мы бы указали это явно:

In [28]:
st.split("т") # неразумно, но просто для примера разбиваем по букве т
Out[28]:
['Пи', 'он грее', 'ся на солнышке.']

Можно ли разбить строку по пустоте? То есть просто разделить ее на отдельные символы? Попробуем.

In [29]:
st.split("") # нельзя
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-29-51561471b73b> in <module>()
----> 1 st.split("") # нельзя

ValueError: empty separator

Python сообщает нам, что разделитель пустой, и делить строку на части не хочет. Если очень нужно, можно превратить строку в список, а потом убрать из него лишние элементы.

In [30]:
list(st)
Out[30]:
['П',
 'и',
 'т',
 'о',
 'н',
 ' ',
 'г',
 'р',
 'е',
 'е',
 'т',
 'с',
 'я',
 ' ',
 'н',
 'а',
 ' ',
 'с',
 'о',
 'л',
 'н',
 'ы',
 'ш',
 'к',
 'е',
 '.']

Метод .join()

Раз есть метод для разбиения строки на список строк, должна быть и обратная операция – для склеивания списка строк в одну большую строку. Возьмём небольшой список words и «соберём» из него одну строку, добавив пробелы между элементами. Для этого нам потребуется метод .join():

In [31]:
words = ['a', 'b', 'c', 'd']
In [32]:
" ".join(words) # в кавычках - с помощью чего склеиваем, в скобках - список «частей» строки
Out[32]:
'a b c d'
In [33]:
my_w = " ".join(words) 
my_w
Out[33]:
'a b c d'

В качестве разделителя могли выбрать что-то другое, например, дефис:

In [34]:
"-".join(words)
Out[34]:
'a-b-c-d'

А могли взять что-то менее привычное (хотя с этими символами мы сталкиваемся часто, просто их не видим): символы, обозначающие переход на новую строку или табуляцию.

In [35]:
s = "\n".join(words) # \n - new line, новая строка
print(s)
a
b
c
d
In [36]:
s2 = "\t".join(words) # \t - tabulation, табуляция
print(s2)
a	b	c	d