Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Строковые функции Python: руководство

Роман Андреев
Роман Андреев
Технический писатель
27 сентября 2022 г.
225
9 минут чтения
Средний рейтинг статьи: 5

Как следует из названия, строковые функции Python 3 предназначены для совершения различных операций над строками. В языке программирования Python строковых функций несколько десятков, и в статье мы рассмотрим самые употребляемые, а также ряд специальных, которые не так популярны, зато полезны. Они могут пригодиться вам не только при форматировании, но и при проверке данных.

Список основных строковых функций для форматирования текста

В первую очередь расскажем о функциях форматирования строк, а чтобы обучение шло веселее, в примерах будем использовать тексты, сгенерированные нейросетью «Порфирьевич» (если фраза состоит из двух предложений, то первое в каждом примере написано человеком, а второе — нейросетью, которую обучали на примерах из русской классики).

  • capitalize() — преобразует первый символ строки в верхний регистр, однако все остальные будут в нижнем:
>>> phrase = 'нехватка программистов повышает значимость DevOps. После презентации разработчики начинают наперебой предлагать свои услуги, конкурируя между собой за DevOps.'
>>> phrase.capitalize()
'Нехватка программистов повышает значимость devops. после презентации разработчики начинают наперебой предлагать свои услуги, конкурируя между собой за devops.'
  • casefold() — возвращает все элементы строки в нижнем регистре:
>>> phrase = 'Российский рынок облачных провайдеров имеет хорошие перспективы в плане импортозамещения. Как он будет развиваться, пока не ясно, но потенциал у него есть.'
>>> phrase.casefold()
'российский рынок облачных провайдеров имеет хорошие перспективы в плане импортозамещения. как он будет развиваться, пока не ясно, но потенциал у него есть.'
  • center() — с помощью этого метода можно выравнивать строки по центру:
>>> text = 'Python прекрасно подходит для написания ИИ'
>>> newtext = text.center(50,'*')
>>> print(newtext)
****Python прекрасно подходит для написания ИИ****

Небольшое пояснение. У функции center() два аргумента: первый (длина строки для центровки) обязательный, второй (заполнитель) — произвольный. В операции выше мы использовали оба. Наша строка состоит из 42 элементов, поэтому оставшиеся 8 были заполнены «звездочками». Если бы второго атрибута не было, на месте звездочек были бы пробелы.

  • upper() и lower() — преобразуют все символы в верхний и нижний регистр соответственно:
>>> text = 'Проекты с применением технологий Интернета вещей становятся в Европе всё более популярными.'
>>> text.lower()
'проекты с применением технологий интернета вещей становятся в европе всё более популярными.'
>>> text.upper()
'ПРОЕКТЫ С ПРИМЕНЕНИЕМ ТЕХНОЛОГИЙ ИНТЕРНЕТА ВЕЩЕЙ СТАНОВЯТСЯ В ЕВРОПЕ ВСЁ БОЛЕЕ ПОПУЛЯРНЫМИ.'
  • replace() — предназначен для замены части строки другим элементом:
>>> text.replace('Европе','России')
'Проекты с применением технологий Интернета вещей становятся в России всё более популярными.'

У функции replace() есть и необязательный количественный атрибут, который обозначает максимальное количество замен, если заменяемый элемент встречается в тексте несколько раз. Он указывается на третьем месте:

>>> text = 'ура-ура-ура'
>>> text.replace('ура','гип',2)
'гип-гип-ура'
  • strip() — удаляет одинаковые символы по краям строки:
>>> text = 'оле-оле-оле'
>>> text.strip('оле')
'-оле-'

Если симметричных значений нет, будет удалено найденное слева или справа, а если указанные символы отсутствуют, вывод останется неизменным:

>>> text.strip('ол')
'е-оле-оле'
>>> text.strip('ле')
'оле-оле-о'
>>> text.strip('ура')
'оле-оле-оле'
  • title() — создает заголовки в соответствии с тем, как это принято в английском, то есть пишет каждое слово с заглавной буквы. Снова похулиганим с Порфирьевичем:
>>> texttitle = 'Респонденты разочарованы сетями 5G. Они ждали новых услуг от телефона, но получили их от Google.'
>>> texttitle.title()
'Респонденты Разочарованы Сетями 5G. Они Ждали Новых Услуг От Телефона, Но Получили Их От Google.'

Вы наверняка заметили, что метод title() делает и еще одну вещь: он переводит не начальные буквы в словах в нижний регистр, если они написаны в верхнем.

  • expandtabs() — меняет табуляцию в тексте, что помогает при форматировании:
>>> clublist = 'Милан\tРеал\tБавария\tАрсенал'
>>> print(clublist)
Милан    Реал    Бавария    Арсенал
>>> clublist.expandtabs(1)
'Милан Реал Бавария Арсенал'
>>> clublist.expandtabs(5)
'Милан     Реал Бавария   Арсенал'

Строковые функции для проверки значений

Иногда бывает необходимо подсчитать определенное количество элементов последовательности или проверить, встречается ли в тексте какое-то значение. Эти и другие задачи решают следующие строковые функции.

  • count() — подсчитывает подстроки (отдельные элементы), встречающиеся в строке. За примером снова обратимся к нашей нейросети:
>>> text = "Облачные технологии значительно ускоряют работу с нейросетями и ИИ. Особенно важны эти технологии для сотрудников крупной корпорации, работающей в любой области — от пилотирования космических кораблей до подготовки программистов."
>>> element = "о"
>>> number = text.count(element)
>>> print("Буква «о» встречается в тексте", number, "раз.(-а)")
Буква «о» встречается в тексте 29 раз(-а).

В качестве подстроки можно указать последовательность символов (будем использовать текст из примера выше):

>>> element = "об"
>>> number = text.count(element)
>>> print("Сочетание «об» встречается в тексте", number, "раз(-а).")
Сочетание «об» встречается в тексте 2 раз(-а).

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

>>> element = "о"
>>> number = text.count(element,20,80)
>>> print("Буква «о» в указанном фрагменте текста встречается", number, "раз(-а).")
Буква «о» в указанном фрагменте текста встречается 6 раз(-а).
  • find() — выполняет поиск указанного в строке значения и возвращает наименьший индекс. Снова используем пример выше:
>>> print(text.find(element))
13

Этот вывод означает, что первая найденная буква «о» располагается на 13-й позиции в строке (на самом деле на 14-й, потому что счет в Python начинается с нуля). Заметьте, что интерпретатор проигнорировал заглавную букву «О», которая как раз и расположена на нулевой позиции.

Теперь давайте совместим две изученные функции в одном коде:

>>> text = "Облачные технологии значительно ускоряют работу с нейросетями и ИИ. Особенно важны эти технологии для сотрудников крупной корпорации, работающей в любой области — от пилотирования космических кораблей до подготовки программистов."
>>> element = "о"
>>> number = text.count(element,20,80)
>>> print("Буква «о» в указанном фрагменте текста встречается", number, "раз(-а), а первый раз во всём тексте на", (text.find(element)), "месте.")
Буква «о» в указанном фрагменте текста встречается 6 раз(-а), а первый раз во всём тексте на 13 месте.
  • index() — по работе похож на find(), однако при отсутствии введенного значения выдаст примерно такую ошибку:
Traceback (most recent call last):
  File "C:\Python\text.py", line 4, in <module>
    print(text.index(element))
ValueError: substring not found

А вот что выдал бы интерпретатор при использовании функции find() в этом случае:

-1

Это отрицательная позиция, то есть значение не найдено.

  • enumerate() — очень полезная функция, которая не только перебирает элементы списка или кортежа, возвращая их значения, но также возвращает и порядковый номер каждого элемента:
team_scores = [78, 74, 56, 53, 49, 47, 44]
for number, score in enumerate(team_scores,1):
    print(str(number) + '-я команда набрала ' + str(score) + ' очков(-а)')

Для вывода значений с их порядковыми номерами мы ввели несколько переменных: number для порядковых номеров, score для значений списка, а str обозначает строку. И вот вывод:

1-я команда набрала 78 очков(-а)
2-я команда набрала 74 очков(-а)
3-я команда набрала 56 очков(-а)
4-я команда набрала 53 очков(-а)
5-я команда набрала 49 очков(-а)
6-я команда набрала 47 очков(-а)
7-я команда набрала 44 очков(-а)

Заметьте, что вторым атрибутом функции enumerate() указано число 1, поскольку иначе Python стал бы считать с нуля.

  • len() — подсчитывает длину объекта, то есть количество элементов, из которых состоит та или иная последовательность:
>>> len(team_scores)
7

Вот так мы посчитали количество элементов в списке из примера выше. А теперь снова повеселимся с Порфирьевичем, напишем строку и подсчитаем число символов в ней:

>>> porfirevich = 'Говорят, что искусственный интеллект исключает человеческий фактор. Но не забывайте, что человеческий фактор все еще присутствует в СМИ и в правительственных структурах.'
>>> len(porfirevich)
169

Специальные строковые функции Python

  • join() — позволяет конвертировать списки в строки:
>>> cities = ['Москва','Санкт-Петербург','Нижний Новгород','Казань','Уфа','Самара','Ростов-на-Дону']
>>> cities_str = ', '.join(cities)
>>> print('Города в одну строчку:', cities_str)
Города в одну строчку: Москва, Санкт-Петербург, Нижний Новгород, Казань, Уфа, Самара, Ростов-на-Дону
  • print() — дает печатное представление любого объекта в Python:
>>> cities = ['Москва','Санкт-Петербург','Нижний Новгород','Казань','Уфа','Самара','Ростов-на-Дону']
>>> print(cities)
['Москва', 'Санкт-Петербург', 'Нижний Новгород', 'Казань', 'Уфа', 'Самара', 'Ростов-на-Дону']
  • type() — возвращает тип объекта:
>>> type(cities)
<class 'list'>

Выяснили, что объект из предыдущего примера — список. Полезно для новичков, ведь они могут поначалу путать, например, списки и кортежи, которые имеют разные функциональные возможности и обрабатываются интерпретатором тоже по-разному.

  • map() — является довольно эффективной заменой цикла for, позволяя перебирать элементы какого-либо итерируемого объекта, применяя к каждому из них встроенную функцию. Для примера давайте преобразуем список строковых значений в целочисленные, для чего задействуем функцию int:
>>> numbers_list = ['4', '7', '11', '12', '17']
>>> list(map(int, numbers_list))
[4, 7, 11, 12, 17]

Как видим, мы использовали функцию list(), «обернув» в нее map() — это было необходимо, чтобы избежать вот такого вывода: 

>>> numbers_list = ['4', '7', '11', '12', '17']
>>> map(int, numbers_list)
<map object at 0x0000000002E272B0>

Это не ошибка, просто получился вывод ID объекта, и программа продолжит работу. Но чтобы получить нужный вывод списка, полезно в таких случаях использовать метод list().

Разумеется, мы описали не все строковые функции Python, но уже этот набор поможет вам производить большое число операций со строками и выполнять различные преобразования (программные и математические). Желаем дальнейших успехов!

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону