Built-in methods
Вбудовані методи рядків у python
У посібнику за типами змінних у python ви дізналися, що Python — це об'єктно-орієнтована мова. Кожен елемент даних у програмі python є об'єктом.
Ви також знайомі з функціями: самостійними блоками коду, які можна викликати для виконання певних завдань.
Методи схожі функції. Метод - спеціалізований тип процедури, що викликається, тісно пов'язаний з об'єктом. Як і функція, метод викликається для виконання окремого завдання, але він викликається лише разом із певним об'єктом і знає про нього під час виконання.
Синтаксис для виклику методу об'єкта виглядає так:
obj.foo(<args>)
Цей код викликає метод .foo()
об'єкта obj
. - аргументи, що передаються методом (якщо є).
Ви дізнаєтеся набагато більше про визначення та виклик методів пізніше у статтях про об'єктно-орієнтоване програмування. Зараз мета засвоїти вбудовані методи, що часто використовуються, які є в python для роботи з рядками.
У наведених методах аргументи, зазначені у квадратних дужках ( []
), є необов'язковими.
Зміна регістру рядка
Методи цієї групи виконують перетворення регістру рядка.
string.capitalize()
наводить першу літеру у верхній регістр, інші у нижній.
s.capitalize()
повертає копію s
з першим символом, перетвореним на верхній регістр, та іншими символами, перетвореними на нижній регістр:
>>> s = 'everyTHing yoU Can IMaGine is rEAl'
>>> s.capitalize()
'Everything you can imagine is real'
Не алфавітні символи не змінюються:
>>> s = 'follow us @PYTHON'
>>> s.capitalize()
'Follow us @python'
string.lower()
перетворює всі буквені символи на малі.
s.lower()
повертає копію s
з усіма літерними символами, перетвореними на нижній регістр:
>>> 'everyTHing yoU Can IMaGine is rEAl'.lower()
'everything you can imagine is real'
string.swapcase()
змінює регістр буквених символів на протилежний.
s.swapcase()
повертає копію s
з великими літерними символами, перетвореними на малі і навпаки:
>>> 'everyTHing yoU Can IMaGine is rEAl'.swapcase()
'EVERYthING YOu cAN imAgINE IS ReaL'
string.title()
перетворює перші літери всіх слів у великі
s.title()
повертає копію, s
в якій перша літера кожного слова перетворюється на верхній регістр, а решта літер — у нижній регістр:
>>> 'the sun also rises'.title()
'The Sun Also Rises'
Цей метод використовує досить простий алгоритм. Він не намагається розрізнити важливі та неважливі слова і не обробляє апострофи, імена чи абревіатури:
>>> 'follow us @PYTHON'.title()
'Follow Us @Python'
string.upper()
перетворює всі буквені символи на великі.
s.upper()
повертає копію s
з усіма літерними символами у верхньому регістрі:
>>> 'follow us @PYTHON'.upper()
'FOLLOW US @PYTHON'
Знайти та замінити підрядок у рядку
Ці методи надають різні способи пошуку в цільовому рядку зазначеного підрядка.
Кожен метод у цій групі підтримує необов'язкові аргументи та аргументи. Вони визначають діапазон пошуку: дія методу обмежена частиною цільового рядка, що починається в позиції символу і триває аж до позиції символу , але не включаючи його. Якщо зазначено, а ні, метод застосовується до частини рядка від кінця.
string.count([, [, ]])
підраховує кількість входжень підрядка у рядок.
s.count()
повертає кількість точних входжень підрядки в s
:
>>> 'foo goo moo'.count('oo')
3
Кількість входження зміниться, якщо вказати і :
>>> 'foo goo moo'.count('oo', 0, 8)
2
string.endswith([, [, ]])
визначає, чи закінчується рядок заданим підрядком.
s.endswith()
повертає, True
якщо s
закінчується зазначеним і False
якщо ні:
>>> 'python'.endswith('on')
True
>>> 'python'.endswith('or')
False
Порівняння обмежено підрядком, між і якщо вони вказані:
>>> 'python'.endswith('yt', 0, 4)
True
>>> 'python'.endswith('yt', 2, 4)
False
string.find([, [, ]])
шукає в рядку заданий підрядок.
s.find()
повертає перший індекс у s
який відповідає початку рядка :
>>> 'Follow Us @Python'.find('Us')
7
Цей метод повертає, -1
якщо зазначений підрядок не знайдено:
>>> 'Follow Us @Python'.find('you')
-1
Пошук у рядку обмежується підрядком між і , якщо вони вказані:
>>> 'Follow Us @Python'.find('Us', 4)
7
>>> 'Follow Us @Python'.find('Us', 4, 7)
-1
string.index([, [, ]])
шукає в рядку заданий підрядок.
Цей метод ідентичний .find()
, крім те що він викликає виняток ValueError
, а то й знайдено:
>>> 'Follow Us @Python'.index('you')
Traceback (most recent call last):
File "", line 1, in <module>
'Follow Us @Python'.index('you')
ValueError: substring not found
string.rfind([, [, ]])
шукає в рядку заданий підрядок, починаючи з кінця.
s.rfind()
повертає індекс останнього входження підрядка до s
, який відповідає початку :
>>> 'Follow Us @Python'.rfind('o')
15
Як і в .find()
, якщо підрядок не знайдено, повертається -1
:
>>> 'Follow Us @Python'.rfind('a')
-1
Пошук у рядку обмежується підрядком між і , якщо вони вказані:
>>> 'Follow Us @Python'.rfind('Us', 0, 14)
7
>>> 'Follow Us @Python'.rfind('Us', 9, 14)
-1
string.rindex([, [, ]])
шукає в рядку заданий підрядок, починаючи з кінця.
Цей метод ідентичний .rfind()
, крім те що він викликає виняток ValueError
, а то й знайдено:
>>> 'Follow Us @Python'.rindex('you')
Traceback (most recent call last):
File "", line 1, in <module>
'Follow Us @Python'.rindex('you')
ValueError: substring not found
string.startswith([, [, ]])
визначає, чи починається рядок із заданого підрядка.
s.startswith()
повертає, True
якщо s
починається із зазначеного і False
якщо ні:
>>> 'Follow Us @Python'.startswith('Fol')
True
>>> 'Follow Us @Python'.startswith('Go')
False
Порівняння обмежено підрядком, між і якщо вони вказані:
>>> 'Follow Us @Python'.startswith('Us', 7)
True
>>> 'Follow Us @Python'.startswith('Us', 8, 16)
False
Класифікація рядків
Методи у цій групі класифікують рядок на основі символів, які він містить.
string.isalnum()
визначає, чи складається рядок із літер та цифр.
s.isalnum()
повертає True
, якщо рядок s
не порожній, а всі символи буквено-цифрові (або буква, або цифра). В іншому випадку False
:
>>> 'abc123'.isalnum()
True
>>> 'abc$123'.isalnum()
False
>>> ''.isalnum()
False
string.isalpha()
визначає, чи складається рядок лише з літер.
s.isalpha()
повертає True
, якщо рядок s
не порожній, а всі символи літерні. В іншому випадку False
:
>>> 'ABCabc'.isalpha()
True
>>> 'abc123'.isalpha()
False
string.isdigit()
визначає, чи складається рядок із цифр (перевірка на число).
s.digit()
повертає True
коли рядок s
не порожній і всі його символи є цифрами, а якщо False
ні:
>>> '123'.isdigit()
True
>>> '123abc'.isdigit()
False
string.isidentifier()
визначає, чи є допустимим ідентифікатором Python.
s.isidentifier()
повертає True
, якщо s
валідний ідентифікатор (назва змінної, функції, класу і т.д.) python, а якщо False
ні:
>>> 'foo32'.isidentifier()
True
>>> '32foo'.isidentifier()
False
>>> 'foo$32'.isidentifier()
False
Важливо: .isidentifier()
поверне True
для рядка, який відповідає зарезервованому ключовому слову python, навіть якщо його не можна використовувати:
>>> 'and'.isidentifier()
True
Ви можете перевірити, чи рядок є ключовим словом Python, використовуючи функцію iskeyword()
, яка знаходиться в модулі keyword
. Один із можливих способів зробити це:
>>> from keyword import iskeyword
>>> iskeyword('and')
True
Якщо ви дійсно хочете переконатися, що рядок можна використовувати як python ідентифікатор, ви повинні перевірити, що .isidentifier()
= True
і iskeyword()
= False
.
string.islower()
визначає, чи є літерні символи рядка малими.
s.islower()
повертає True
, якщо рядок s
не порожній, і всі літерні символи, що містяться в ньому, малі, а False
якщо ні. Чи не алфавітні символи ігноруються:
>>> 'abc'.islower()
True
>>> 'abc1$d'.islower()
True
>>> 'Abc1$D'.islower()
False
string.isprintable()
визначає, чи складається рядок лише з символів, що друкуються.
s.isprintable()
повертає, True
якщо рядок s
порожній або всі літерні символи, які він містить, можна вивести на екран. Повертає, False
якщо s
містить хоч один спеціальний символ. Чи не алфавітні символи ігноруються:
>>> 'a\tb'.isprintable() # \t - символ табуляции
False
>>> 'a b'.isprintable()
True
>>> ''.isprintable()
True
>>> 'a\nb'.isprintable() # \n - символ перевода строки
False
Важливо: Це єдиний .is****()
метод, який повертає True
, якщо s
порожній рядок. Всі інші повертаються False
.
string.isspace()
визначає, чи рядок складається лише з пробельних символів.
s.isspace()
повертає True
, якщо s
не порожній рядок, і всі символи є пробельними, а False
якщо ні.
Найбільш часто зустрічаються пробільні символи - це пробіл ' '
, табуляція '\t'
і новий рядок '\n'
:
>>> ' \t \n '.isspace()
True
>>> ' a '.isspace()
False
Тим не менш, є кілька символів ASCII, які вважаються пробілами. І якщо враховувати символи Юнікоду, їх ще більше:
>>> '\f\u2005\r'.isspace()
True
'\f'
та '\r'
є escape-послідовностями для символів ASCII; '\u2005'
це escape-послідовність для Unicode.
string.istitle()
визначає, чи починаються слова рядка з великої літери.
s.istitle()
повертає True
коли s
не порожній рядок і перший алфавітний символ кожного слова у верхньому регістрі, а решта літерних символів у кожному слові малі. Повертає False
, якщо ні:
>>> 'This Is A Title'.istitle()
True
>>> 'This is a title'.istitle()
False
>>> 'Give Me The #$#@ Ball!'.istitle()
True
string.isupper()
визначає, чи є буквені символи рядка великими.
s.isupper()
повертає True
, якщо рядок s
не порожня, і всі літерні символи, що містяться в ній, є великими, і в False
, якщо ні. Чи не алфавітні символи ігноруються:
>>> 'ABC'.isupper()
True
>>> 'ABC1$D'.isupper()
True
>>> 'Abc1$D'.isupper()
False
Вирівнювання рядків, відступи
Методи цієї групи впливають виведення рядка.
string.center([, ])
вирівнює рядок по центру.
s.center()
повертає рядок, що складається з s
вирівняної по ширині . За замовчуванням відступ складається з пробілу ASCII:
>>> 'py'.center(10)
' py '
Якщо вказано необов'язковий аргумент , він використовується як символ заповнення:
>>> 'py'.center(10, '-')
'----py----'
Якщо s
більше або дорівнює , рядок повертається без змін:
>>> 'python'.center(2)
'python'
string.expandtabs(tabsize=8)
замінює табуляції на прогалини
s.expandtabs()
замінює кожен символ табуляції ( '\t'
) пробілами. За замовчуванням табуляція замінюється на 8 пробілів:
>>> 'a\tb\tc'.expandtabs()
'a b c'
>>> 'aaa\tbbb\tc'.expandtabs()
'aaa bbb c'
tabsize
необов'язковий параметр, що задає кількість прогалин:
>>> 'a\tb\tc'.expandtabs(4)
'a b c'
>>> 'aaa\tbbb\tc'.expandtabs(tabsize=4)
'aaa bbb c'
string.ljust([, ])
вирівнювання лівим краєм рядка в полі.
s.ljust()
повертає рядок s
, вирівняний по лівому краю в полі завширшки . За замовчуванням відступ складається з пробілу ASCII:
>>> 'python'.ljust(10)
'python '
Якщо вказано аргумент , він використовується як символ заповнення:
>>> 'python'.ljust(10, '-')
'python----'
Якщо s
більше або дорівнює , рядок повертається без змін:
>>> 'python'.ljust(2)
'python'
string.lstrip([])
обрізає пробільні символи зліва
s.lstrip()
повертає копію s
, в якій всі пробілові символи з лівого краю видалені:
>>> ' foo bar baz '.lstrip()
'foo bar baz '
>>> '\t\nfoo\t\nbar\t\nbaz'.lstrip()
'foo\t\nbar\t\nbaz'
Необов'язковий аргумент визначає набір символів, які будуть видалені:
>>> 'https://www.pythonru.com'.lstrip('/:pths')
'www.pythonru.com'
string.replace(, [, ])
замінює входження підрядки у рядку.
s.replace(, )
повертає копію s
де всі входження підрядки , замінені на :
>>> 'I hate python! I hate python! I hate python!'.replace('hate', 'love')
'I love python! I love python! I love python!'
Якщо вказано необов'язковий аргумент , виконується кількість замін:
>>> 'I hate python! I hate python! I hate python!'.replace('hate', 'love', 2)
'I love python! I love python! I hate python!'
string.rjust([, ])
вирівнювання з правого краю рядка в полі.
s.rjust()
повертає рядок s
, вирівняний праворуч у полі шириною . За замовчуванням відступ складається з пробілу ASCII:
>>> 'python'.rjust(10)
' python'
Якщо вказано аргумент , він використовується як символ заповнення:
>>> 'python'.rjust(10, '-')
'----python'
Якщо s
більше або дорівнює , рядок повертається без змін:
>>> 'python'.rjust(2)
'python'
string.rstrip([])
обрізає пробільні символи праворуч
s.rstrip()
повертає копію s
без пробілів, видалених з правого краю:
>>> ' foo bar baz '.rstrip()
' foo bar baz'
>>> 'foo\t\nbar\t\nbaz\t\n'.rstrip()
'foo\t\nbar\t\nbaz'
Необов'язковий аргумент визначає набір символів, які будуть видалені:
>>> 'foo.$$$;'.rstrip(';$.')
'foo'
string.strip([])
видаляє символи з лівого та правого краю рядка.
s.strip()
еквівалентно послідовному виклику s.lstrip()
та s.rstrip()
. Без аргументу метод видаляє прогалини на початку та наприкінці:
>>> s = ' foo bar baz\t\t\t'
>>> s = s.lstrip()
>>> s = s.rstrip()
>>> s
'foo bar baz'
Як .lstrip()
і .rstrip()
, необов'язковий аргумент визначає набір символів, які будуть видалені:
>>> 'www.pythonru.com'.strip('w.moc')
'pythonru'
Важливо: Коли значення методу, що повертається, є іншим рядком, як це часто буває, методи можна викликати послідовно:
>>> ' foo bar baz\t\t\t'.lstrip().rstrip()
'foo bar baz'
>>> ' foo bar baz\t\t\t'.strip()
'foo bar baz'
>>> 'www.pythonru.com'.lstrip('w.').rstrip('.moc')
'pythonru'
>>> 'www.pythonru.com'.strip('w.moc')
'pythonru'
string.zfill()
доповнює рядок нулями зліва.
s.zfill()
повертає копію s
доповнену '0'
ліворуч для досягнення довжини рядка вказаної в :
>>> '42'.zfill(5)
'00042'
Якщо s
містить знак перед цифрами, він залишається зліва рядка:
>>> '+42'.zfill(8)
'+0000042'
>>> '-42'.zfill(8)
'-0000042'
Якщо s
більше або дорівнює , рядок повертається без змін:
>>> '-42'.zfill(3)
'-42'
.zfill()
найбільш корисний для рядкових уявлень чисел, але python із задоволенням заповнить рядок нулями, навіть якщо в ньому немає чисел:
>>> 'foo'.zfill(6)
'000foo'
Методи перетворення рядка до списку
Методи у цій групі перетворюють рядок на інший тип даних і навпаки. Ці методи повертають або приймають об'єкти, що ітеруються, — термін Python для послідовного набору об'єктів.
Багато з цих методів повертають або список, або кортеж. Це два схожі типи даних, які є прототипами прикладів ітерацій у python. Список укладений у квадратні дужки ( []
), а кортеж укладено у прості ( ()
).
Тепер погляньмо на останню групу рядкових методів.
string.join()
поєднує список у рядок.
s.join()
повертає рядок, який є результатом конкатенації об'єкта з роздільником s
.
Зверніть увагу, що .join()
викликається рядок-розділювач s
. має бути послідовністю рядкових об'єктів.
Приклади коду допоможуть уникнути. У першому прикладі роздільником s
є рядок ', '
, а список рядків:
>>> ', '.join(['foo', 'bar', 'baz', 'qux'])
'foo, bar, baz, qux'
В результаті виходить один рядок, що складається зі списку об'єктів, розділених комами.
У наступному прикладі вказується як одне рядкове значення. Коли рядкове значення використовується як ітерований, воно інтерпретується як список окремих символів рядка:
>>> list('corge')
['c', 'o', 'r', 'g', 'e']
>>> ':'.join('corge')
'c:o:r:g:e'
Таким чином, результатом ':'.join('corge')
є рядок, що складається з кожного символу 'corge'
, розділеного символом ':'
.
Цей приклад завершується з помилкою TypeError
, тому що один з об'єктів не є рядком:
>>> '---'.join(['foo', 23, 'bar'])
Traceback (most recent call last):
File "", line 1, in <module>
'---'.join(['foo', 23, 'bar'])
TypeError: sequence item 1: expected str instance, int found
Це можна виправити так:
>>> '---'.join(['foo', str(23), 'bar'])
'foo---23---bar'
Як ви скоро побачите, багато об'єктів в Python можна ітерувати, і .join()
особливо корисний для створення рядків.
string.partition()
ділить рядок на основі роздільника.
s.partition()
відокремлює від s
підрядок довжиною від початку до першого входження . Значення, що повертається, являє собою кортеж з трьох частин:
Частина
s
доРозділювач
Частина
s
після
Ось пара прикладів .partition()
у роботі:
>>> 'foo.bar'.partition('.')
('foo', '.', 'bar')
>>> 'foo@@bar@@baz'.partition('@@')
('foo', '@@', 'bar@@baz')
Якщо не знайдено в s
, повертається кортеж містить s
два порожні рядки:
>>> 'foo.bar'.partition('@@')
('foo.bar', '', '')
s.rpartition()
ділить рядок на основі роздільника, починаючи з кінця.
s.rpartition()
працює як , за винятком того, що ділиться при останньому входженні замість першого:s.partition()s
>>> 'foo@@bar@@baz'.partition('@@')
('foo', '@@', 'bar@@baz')
>>> 'foo@@bar@@baz'.rpartition('@@')
('foo@@bar', '@@', 'baz')
string.rsplit(sep=None, maxsplit=-1)
ділить рядок на список із підрядків.
Без аргументів s.rsplit()
ділить s
на підрядки, розділені будь-якою послідовністю прогалин, і повертає список:
>>> 'foo bar baz qux'.rsplit()
['foo', 'bar', 'baz', 'qux']
>>> 'foo\n\tbar baz\r\fqux'.rsplit()
['foo', 'bar', 'baz', 'qux']
Якщо зазначено, він використовується як роздільник:
>>> 'foo.bar.baz.qux'.rsplit(sep='.')
['foo', 'bar', 'baz', 'qux']
Якщо = None
, рядок розділяється пробілами, якби не було вказано взагалі.
Коли явно вказано як роздільник s
, послідовні повтори роздільника будуть повернуті як порожні рядки:
>>> 'foo...bar'.rsplit(sep='.')
['foo', '', '', 'bar']
Це не працює, коли не вказано. У цьому випадку послідовні символи пробілів об'єднуються в один роздільник, і результуючий список ніколи не міститиме порожніх рядків:
>>> 'foo\t\t\tbar'.rsplit()
['foo', 'bar']
Якщо вказано необов'язковий параметр , виконується максимальна кількість поділів, починаючи з правого краю s
:
>>> 'www.pythonru.com'.rsplit(sep='.', maxsplit=1)
['www.pythonru', 'com']
Стандартне значення для — -1
. Це означає, що всі можливі поділи мають бути виконані:
>>> 'www.pythonru.com'.rsplit(sep='.', maxsplit=-1)
['www', 'pythonru', 'com']
>>> 'www.pythonru.com'.rsplit(sep='.')
['www', 'pythonru', 'com']
string.split(sep=None, maxsplit=-1)
ділить рядок на список із підрядків.
s.split()
веде себе як s.rsplit()
, за винятком того, що при вказівці , розподіл починається з лівого краю s
:
>>> 'www.pythonru.com'.split('.', maxsplit=1)
['www', 'pythonru.com']
>>> 'www.pythonru.com'.rsplit('.', maxsplit=1)
['www.pythonru', 'com']
Якщо не вказано, між .rsplit()
і .split()
в python різниці немає.
string.splitlines([])
ділить текст на список рядків.
s.splitlines()
ділить s
на рядки та повертає їх у списку. Будь-який із наступних символів або послідовностей символів вважається межею рядка:
Розділювач
Значення
Новий рядок
Повернення каретки
\r
Повернення каретки + переклад рядка
\v або \x0b
Таблиці рядків
\f або \x0c
Подання форми
\x1c
Розділювач файлів
\x1d
Розділювач груп
\x1e
Розділювач записів
85
Наступний рядок
&2028
Новий рядок (Unicode)
&2029
Новий абзац (Unicode)
Ось приклад використання декількох різних роздільників рядків:
>>> 'foo\nbar\r\nbaz\fqux\u2028quux'.splitlines()
['foo', 'bar', 'baz', 'qux', 'quux']
Якщо у рядку присутні послідовні символи межі рядка, вони з'являться у списку результатів як порожні рядки:
>>> 'foo\f\f\fbar'.splitlines()
['foo', '', '', 'bar']
Якщо необов'язковий аргумент вказано і його булеве значення True
, то символи межі рядків зберігаються у списку підрядків:
>>> 'foo\nbar\nbaz\nqux'.splitlines(True)
['foo\n', 'bar\n', 'baz\n', 'qux']
>>\> 'foo\nbar\nbaz\nqux'.splitlines(8)
['foo\n', 'bar\n', 'baz\n', 'qux']
Last updated