Перейти до змісту

Методи символьних рядків

Об'єкти типу str мають багато методів. Ми розглянемо декілька з них, насамперед ті, що найчастіше використовуються.

split()

Метод split() "розбиває" об'єкт символьного типу по вказаному символу чи цілому рядку і повертає список рядків.

Припустимо якщо ми хочемо розділити рядок на окремі слова, то треба "розбити" цей рядок по символу "пробіл":

>>> s = "Happy New Year"
>>> s.split(' ')
['Happy', 'New', 'Year']
>>>

Ми отримали список елементами якого є окремі слова символьного рядка. Давайте переконаймося що ми отримали саме список:

>>> l = s.split(' ')
>>> type(l)
<class 'list'>
>>>

Тепер ми можемо оперувати з окремими словами розбитого символьного рядка:

>>> l[0]
'Happy'
>>> l[2]
'Year'
>>> l[1:]
['New', 'Year']
>>>

Елементами списку є символьні рядки:

>>> type( l[0] )
<class 'str'>
>>> print(l[1] + ' ' + l[2])
New Year
>>> g = l[1] + ' ' + l[2] + ' 2018'
>>> g
'New Year 2018'
>>> print(g)
New Year 2018
>>>

В якості аргументу методу split() можна передати не тільки одни символ, а й цілий рядок:

>>> s = 'to be or not to be'
>>> s.split('not')
['to be or ', ' to be']
>>> s.split('be')
['to ', ' or not to ', '']
>>>

Якщо не вказувати жодного аргументу методу split(), то рядок буде розділено по так званому "пробільному символу". До пробільного символа належать, власне, символ пробілу, символ табуляції, символ нового рядка та деякі інші:

>>> s = 'to be or not to be'
>>> s.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>>

Розглянемо ще декілька прикладів використання метода split():

>>> date = '2017-12-31'
>>> sep_date = date.split('-')
>>> sep_date
['2017', '12', '31']
>>> year = sep_date[0]
>>> year
'2017'
>>> month = date.split('-')[1]
>>> print('Month =', month)
Month = 12
>>>
>>> s1 = 'Number of girls:11'
>>> s2 = 'Number of boys:10'
>>> s1.split(':')
['Number of girls', '11']
>>> s1.split(':')[1]
'11'
>>> n1 = s1.split(':')[1]
>>> n1
'11'
>>> n2 = s2.split(':')[1]
>>> total = int(n1) + int(n2)
>>> total
21
>>> type(total)
<class 'int'>

join()

Метод join() об'єднує об'єктом рядкового типу послідовність з елементів рядкового типу і повертає символьний рядок. Звучить трохи складно? Розглянемо на прикладі:

>>> l = ['Red', 'Green', 'Blue']  # список з трьох елементів рядкового типу
>>> s = '+'
>>> result = s.join(l) # об'єднуємо елементи списку "l" за допомогою рядка "s"
>>> result
'Red+Green+Blue'
>>> type(result)  # отримуємо рядок
<class 'str'>
>>>

Зауважте, що метод join() відноситься до рядка, а не до списку! Запис виду:

string.join(sequence)

можна прочитати так:

об'єкт "string" типу str приймає послідовність "sequence" і об'єднує елементи послідовності sequence методом конкатенації перемежаючи елементи своїм значенням.

або ж ще простіше:

об'єднати послідовніть "sequence" за допомогою рядка "string"

Розглянемо приклади використання метода join():

>>> l = ['Red', 'Green', 'Blue']
>>> ' '.join(l)  # явно вказуємо рядок, яким об'єднувати список
'Red Green Blue'
>>> t = ('Good', 'bye')  # кортеж — теж послідовність
>>> '-'.join(t)
'Good-bye'
>>> s = 'HELLO' # і символьний рядок — теж послідовність елементами якої є окремі символи
>>> ' '.join(s)
'H E L L O'
>>> '.'.join('017') # явно вказуємо і послідовність, і чим її об'єднувати
'0.1.7'
>>> ''.join( ['Sun', 'day'] )  # пустим рядком теж можна об'єднати
'Sunday'
>>>
>>> l = [1, 2, 3] # щоб отримати рядок об'єднувати можна, певна річ, тільки рядки
>>> '-'.join(l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>>

strip()

string.strip()

Видаляє з символьного рядка string усі пробільні символи на його початку і кінці.

>>> '  привіт\n'.strip()
'привіт'
>>>

Можна вказати які саме символи видаляти:

>>> '  привіт\n'.strip('\n')
'  привіт'
>>> '---привіт---'.strip('-')
'привіт'
>>>

Пошук і заміна символів

find()

Пошук рядка в іншому рядку.

string.find(substring)

Метод повертає індекс першого входження рядка "substring" у рядку "string". У разі якщо рядок "string" не містить рядка "substring" повертає -1.

>>> s = 'to be or not to be'
>>> s.find('be')
3
>>> s.find('to')
0
>>> s.find('well')
-1
>>>

index()

string.index(substring)

Метод повертає індекс першого входження рядка "substring" у рядку "string". У разі якщо рядок "string" не містить рядка "substring" піднімає виняток ValueError.

>>> 'asdf'.index('sd')
1
>>> 'asdf'.index('x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>>

startswith()

string.startswith(prefix)

Повертає True якщо string починається з рядка prefix:

>>> 'Привіт'.startswith('Пр')
True
>>> 'Привіт'.startswith('По')
False
>>>

Можна тестувати одразу на декілька рядків, тоді їх треба об'єднати у кортеж:

>>> 'Привіт'.startswith(('По', 'Пр'))
True
>>>

replace()

string.replace(old, new)

Шукає у рядку string усі входження рядка old і заміняє їх рядком new. Повертає новий рядок.

>>> s = 'to be or not to be'
>>> s.replace('be', 'beat')
'to beat or not to beat'
>>> s.replace('beat', 'eat')
'to be or not to be'
>>> 'Без Пробілів'.replace(' ', '')
'БезПробілів'
>>>

Перетворення регістра букв

Ряд методів перетворюють символьний рядок в інший проводячи певні маніпуляції з регістром букв.

upper()

string.upper()

Переводить усі символи рядка "string" у верхній регістр і поветає новий рядок.

>>> 'hello'.upper()
'HELLO'
>>> 'wElL'.upper()
'WELL'
>>>

lower()

string.lower()

Переводить усі символи рядка "string" у нижній регістр.

>>> 'Hello'.lower()
'hello'
>>> 'wElL'.lower()
'well'
>>>

title()

string.title()

Перетворює рядок так, що перша буква кожного слова переводиться у верхній регістр, а решта — у нижній.

>>> 'знову зима'.title()
'Знову Зима'
>>> 'готель "УКРАЇНА"'.title()
'Готель "Україна"'
>>>

capitalize()

string.capitalize()

Перетворює рядок так, що перша буква переводиться у верхній регістр, а решта — у нижній.

>>> 'знову Зима'.capitalize()
'Знову зима'
>>>

swapcase()

string.swapcase()

Перетворює рядок так, що букви верхнього регістра переводяться в нижній, а букви нижнього регістра — у верхній.

>>> 'нЕ КРИЧИ!'.swapcase()
'Не кричи!'
>>>

Методи-предикати

Тип даних str має методи, які дозволяють визначити певні властивості символьного рядка, наприклад такі як належність символів до певної групи. Повертають вони значення типу bool.

Далі у двох таблицях наведено такі методи і коротка інформація про них.

метод перевіряє на
isspace() пробільні символи (\t\n\r\f\v…)
isalpha() буква
islower() нижній регістр
isupper() верхній регістр
isidentifier() валідний ідентифікатор
метод [ !#$%…] [a-zA-Z] [¼½¾] [²³¹] [0-9]
isprintable() True True True True True
isalnum() False True True True True
isnumeric() False False True True True
isdigit() False False False True True
isdecimal() False False False False True