Skip to main content

Рядки

Робота з текстовими даними у Python реалізована через str-об'єкти або рядки.

Рядок — це незмінна впорядкована послідовність символів в деякому кодуванні. За замовчуванням використовується кодування UTF-8, але можна працювати майже з усіма відомими таблицями кодування символів. Для того щоб створити змінну типу "рядок", необхідно певний набір символів взяти в лапки.

Варіант 1. Одинарні лапки (апостроф) 'some text'

Варіант 2. Подвійні лапки "some text".

Різні варіанти використання лапок обумовлені тим, що при використанні одинарних лапок, можна в рядку вказати подвійні і навпаки.

str1 = ‘Авто “BMW”’

str2 = “Об’єкт”

Впорядкована послідовність означає, що до елементів рядку можна звертатися по індексу:

s = "Hello world!"

print(s[0]) # H

print(s[-1]) # !

Важливо! Індексація всіх послідовностей в Python починається з 0!

Незмінна послідовність означає, що якщо рядок вже створено, то змінити його не можна, можна тільки створити новий.

s = "Hello world!"

s[0] = "Q" # Тут буде викликано виключення (помилка) TypeError

Для об’єднання рядків використовують оператор «+»

s1, s2 = ‘Hello ‘, ‘world’

s = s1 + s2 # Hello world

Для багаторазового повторення використовують оператор «***»

S = ‘SPAM’ * 5

# SPAMSPAMSPAMSPAMSPAM

Досить часто, необхідно отримати не один якийсь символ (за індексом), а деякий набір символів за певними простими правилами. Наприклад: перші 5 символів, останні 3 символи, кожен другий символ. В таких завданнях замість перебору в циклі набагато зручніше використовувати так званий зріз (slice, slicing). Зріз – отримання з даного рядка набору з його символів. Зріз рядка також є рядком. Отримання одного символу рядка є найпростішим варіантом зрізу.

Задати зріз можна одним з двох варіантів:

str[start: stop]

str[start: stop: step]

Для рядку str береться зріз від символу з індексом start, до символу з індексом stop (не включаючи його), з кроком step (тобто будуть взяті символи з індексами start, start + step, start + 2 step* і т. д.). Також при записі зрізу деякі, а можливо і всі параметри можуть бути опущені (знаки двокрапки в записі все рівно залишаються). У випадку відсутності деяких параметрів їх значення встановлюється за замовчуванням, а саме: start = 0, stop = кількості символів рядку, step = 1.

У випадку, якщо параметри start і stop мають від’ємні значення, то нумерація відбувається з кінця (кількість символів рядка + від’ємний індекс). Якщо параметр step має від’ємне значення, то зріз береться cправа наліво. Приклади зрізів:

str = ‘ABCDEFGHIJ’

str[1] # ‘B’

str[1:4] # ‘BCD’

str[:4] # ‘ABCD’

str[4:] # ‘EFGHIJ’

str[-4:] # ‘GHIJ’

str[1:-1] # ‘BCDEFGHI’

str[1:-1:2] # ‘BDFH’

str[::-1] # ‘JIHGFEDCBA’

Кілька основних функцій для роботи з рядками

Для того щоб дізнатися кількість символів у рядку (довжину рядка), необхідно скористатися функцією len(рядок)

len('Привіт!')   # 7

Для отримання коду символу можна скористатися функцією ord(c), за якою повертається ціле число, яке відповідає коду цього символу.

ord('a'), ord('€')   # 97, 8364

Зворотною до функції ord() є функція chr(n), за якою для цілого числа n повертається символ (рядок, що є єдиним символом), для якого n є його кодом.

chr(97), chr(8364)    # a, €*

Кілька основних методів для роботи з рядками

str.find(substr [, start [,end]]). Повертає найменший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end]. Тобто знаходиться перше входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то повертається значення -1.

my_str = 'barbarian'

my_str.find('bar') # 0

my_str.find('bar', 1) # 3

my_str.find('bar', 1, 2) # -1

str.rfind(substr [, start [,end]]). Повертає найбільший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться останнє входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то повертається значення -1

my_str = 'barbarian'

my_str.rfind('bar') # 3

my_str.rfind('bar', 1) # 3

my_str.rfind('bar', 1, 2) # -1

str.index(substr [, start [,end]]). Повертає найменший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться перше входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то виникає виняток ValueError.

my_str = 'barbarian'

my_str.index('bar') # 0

my_str.index('bar', 1) # 3

my_str.index('bar', 1, 2) # ValueError

str.rindex(substr [, start [,end]]). Повертає найбільший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться останнє входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то виникає виняток ValueError

my_str = 'barbarian'

my_str.rindex('bar') # 3

my_str.rindex('bar', 1) # 3

my_str.rindex('bar', 1, 2) # ValueError

str.startswith(prefix[, start[, end]]). Повертає True, якщо зріз str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу) починається з префіксу prefix, , інакше – False.

my_str = 'Discworld'

my_str.startswith('Mad') # False

my_str.startswith('Disc') # True

my_str.startswith(('Disc', 'Mad')) # True

my_str.startswith('world', 4, 9) # True

str.endswith(suffix[, start[, end]]). Повертає True, якщо зріз str[start:end] закінчується на суфікс suffix, інакше – False.

my_str = 'Discworld'

my_str.endswith('jockey') # False

my_str.endswith('world') # True

my_str.endswith(('jockey', 'world')) # True

my_str.endswith('Disc', 0, 4) # True

str.count(substr [, start [,end]]). Повертає кількість входжень підрядка sub в зріз str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу) без самоперетинів.

my_str = 'підрядок з рядків'

my_str.count('рядок') # 1

my_str.count('ряд') *# 2

my_str.count('ряд', 0, -1) # 2

my_str.count('ряд', 8) # 1

my_str.count('ряд', 1, 5) # 0

my_str.count('ряд', 1, 6) # 1

str.upper(). Повертає копію рядка, в якому всі літери, записані в нижньому регістрі, будуть приведені до верхнього регістру

'SoMe СлОнов'.upper()

# SOME СЛОНОВ

str.lower(). Повертає копію рядка, в якому всі літери, записані в верхньому регістрі, будуть приведені до нижнього регістру

'SoMe СлОнов'.lower()

# some слонов

str.swapcase(). Повертає копію рядка, в якому всі літери, записані в верхньому регістрі, будуть приведені до нижнього регістру, а нижньому – до верхнього.

'Кіт ОбОрмот!'.swapcase()

# кІТ оБоРМОТ!

str.title(). Повертає копію рядка, в якому перша літера кожного слова буде приведена до верхнього регістру, а всі інші – до нижнього.

'кіт ОбОрмот!'.title() # Кіт Обормот!

"they're bill's friends from the UK".title()

# They'Re Bill'S Friends From The Uk

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

'пОЧАТИ З ВЕЛИКОЇ'.capitalize() # Почати з великої

str.replace(old, new[, count]). Повертає копію рядка, в якому всі входження підрядка old будуть замінені на новий підрядок new. Якщо задано парметри count, то буде виконано не більше чим count замін

my_str = 'barbarian'

my_str = my_str.replace('bar', 'mur') # 'murmurian'

my_str = my_str.replace('mur', 'bur', 1) # 'burmurian'

str.strip([chars]). Повертає копію рядка з вилученими початковими та кінцевими символами, вказаними в рядку chars. Якщо параметр chars відсутній або None, то вилучаються пропуски.

'abca'.strip('ac') # 'b'

' abca\n \t'.strip() # 'abca'

str.split(sep=None, maxsplit=-1). Повертає список слів, які отримуються розбиттям рядка за роздільником рядком sep str.join(iterable). Повертає рядок, який є результатом конкатенації всіх рядків з iterable. Під час конкатенації між рядковими елементами iterable буде розміщений рядок str.

'1,2,3'.split(',') # ['1', '2', '3']

'1,2,3'.split(',', maxsplit=1) # ['1', '2,3']

'1,2,,3,'.split(',') # ['1', '2', '', '3', '']

'1 2 3'.split() # ['1', '2', '3']

'1 2 3'.split(maxsplit=1) # ['1', '2 3']

' 1 2 3 '.split() # ['1', '2', '3']

str.isalpha(). Повертає True, якщо рядок є непорожнім і складається лише з алфавітних символів, інакше – False.

''.isalpha() # False

' '.isalpha() # False

'!@#'.isalpha() # False

'abc'.isalpha() # True

'123'.isalpha() # False

'abc123'.isalpha() # False

str.isdecimal(). Повертає True, якщо рядок є непорожнім і складається лише з десяткових цифр (десяткових символів), інакше – False.

''.isdecimal() # False

'0'.isdecimal() # True

'1'.isdecimal() # True

'1000'.isdecimal() # True

'1.1'.isdecimal() # False

'1 000'.isdecimal() # False

'a'.isdecimal() # False

str.isdigit(). Повертає True, якщо рядок є непорожнім і складається лише з цифр, інакше – False

''.isdigit() # False

' '.isdigit() # False

'!@#'.isdigit() # False

'abc'.isdigit() # False

'123'.isdigit() # True

'abc123'.isdigit() # False

str.islower(). Повертає True, якщо рядок містить принаймні одну літеру, і всі літери записані в нижньому регістрі, інакше – False.

'нижній lower'.islower() # True

'12'.islower() # False

str.isupper(). Повертає True, якщо рядок містить принаймні

одну літеру, і всі літери записані в верхньому регістрі, інакше – False.

'ВЕРХНІЙ UPPER'.isupper() # True

'12'.isupper() # False