Методы работы со строками

Текстовые переменные str в Питоне

Строковый тип str в Python используют для работы с любыми текстовыми данными. Python автоматически определяет тип str по кавычкам – одинарным или двойным:

>>> stroka = 'Python'  >>> type(stroka)  <class 'str'>  >>> stroka2 = "code"  >>> type(stroka2)  <class 'str'>  

Для решения многих задач строковую переменную нужно объявить заранее, до начала исполнения основной части программы. Создать пустую переменную strпросто:

stroka = ''

Или:

stroka2 = ""

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

>>> print("'Самоучитель Python' - возможно, лучший справочник по Питону.")  'Самоучитель Python' - возможно, лучший справочник по Питону.  >>> print('"Самоучитель Python" - возможно, лучший справочник по Питону.')  "Самоучитель Python" - возможно, лучший справочник по Питону.  

Использование одного и того же вида кавычек внутри и снаружи строки вызовет ошибку:

>>> print(""Самоучитель Python" - возможно, лучший справочник по Питону.")    File "<pyshell>", line 1      print(""Самоучитель Python" - возможно, лучший справочник по Питону.")                        ^  SyntaxError: invalid syntax  

Кроме двойных " и одинарных кавычек ', в Python используются и тройные ''' – в них заключают текст, состоящий из нескольких строк, или программный код:

>>> print('''В тройные кавычки заключают многострочный текст.  Программный код также можно выделить тройными кавычками.''')  В тройные кавычки заключают многострочный текст.  Программный код также можно выделить тройными кавычками.  

Длина строки len в Python

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

>>> stroka = 'python'  >>> print(len(stroka))  6  >>> stroka1 = ' '  >>> print(len(stroka1))  1  

Преобразование других типов данных в строку

Целые и вещественные числа преобразуются в строки одинаково:

>>> number1 = 55  >>> number2 = 55.5  >>> stroka1 = str(number1)  >>> stroka2 = str(number2)  >>> print(type(stroka1))  <class 'str'>  >>> print(type(stroka2))  <class 'str'>  

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

Сложение и умножение строк

Строки можно складывать – эта операция также известна как конкатенация:

>>> str1 = 'Python'  >>> str2 = ' - '  >>> str3 = 'самый гибкий язык программирования'  >>> print(str1 + str2 + str3)  Python - самый гибкий язык программирования  

При необходимости строку можно умножить на целое число – эта операция называется репликацией:

>>> stroka = '*** '  >>> print(stroka * 5)  *** *** *** *** ***  

Подстроки

Подстрокой называется фрагмент определенной строки. Например, ‘abra’ является подстрокой ‘abrakadabra’. Чтобы определить, входит ли какая-то определенная подстрока в строку, используют оператор in:

>>> stroka = 'abrakadabra'  >>> print('abra' in stroka)  True  >>> print('zebra' in stroka)  False  

Индексация строк в Python

Для обращения к определенному символу строки используют индекс – порядковый номер элемента. Python поддерживает два типа индексации – положительную, при которой отсчет элементов начинается с 0 и с начала строки, и отрицательную, при которой отсчет начинается с -1 и с конца:

Положительные индексы 0 1 2 3 4 5 6
Пример строки P r o g l i b
Отрицательные индексы -7 -6 -5 -4 -3 -2 -1

Чтобы получить определенный элемент строки, нужно указать его индекс в квадратных скобках:

>>> stroka = 'программирование'  >>> print(stroka[7])  м  >>> print(stroka[-1])  е  

Срезы строк в Python

Индексы позволяют работать с отдельными элементами строк. Для работы с подстроками используют срезы, в которых задается нужный диапазон:

>>> stroka = 'программирование'  >>> print(stroka[7:10])  мир  

Диапазон среза [a:b] начинается с первого указанного элемента а включительно, и заканчивается на последнем, не включая b в результат:

>>> stroka = 'программa'  >>> print(stroka[3:8])  грамм

Если не указать первый элемент диапазона [:b], срез будет выполнен с начала строки до позиции второго элемента b:

>>> stroka = 'программa'  >>> print(stroka[:4])  прог  

В случае отсутствия второго элемента [a:]срез будет сделан с позиции первого символа и до конца строки:

>>> stroka = 'программa'  >>> print(stroka[3:])  граммa  

Если не указана ни стартовая, ни финальная позиция среза, он будет равен исходной строке:

>>> stroka = 'позиции не заданы'  >>> print(stroka[:])  позиции не заданы  

Шаг среза

Помимо диапазона, можно задавать шаг среза. В приведенном ниже примере выбирается символ из стартовой позиции среза, а затем каждая 3-я буква из диапазона:

>>> stroka = 'Python лучше всего подходит для новичков.'  >>> print(stroka[1:15:3])  yoлшв  

Шаг может быть отрицательным – в этом случае символы будут выбираться, начиная с конца строки:

>>> stroka = 'это пример отрицательного шага'  >>> print(stroka[-1:-15:-4])  а нт  

Срез[::-1] может оказаться очень полезным при решении задач, связанных с палиндромами:

>>> stroka = 'А роза упала на лапу Азора'  >>> print(stroka[::-1])  арозА упал ан алапу азор А  

Замена символа в строке

Строки в Python относятся к неизменяемым типам данных. По этой причине попытка замены символа по индексу обречена на провал:

>>> stroka = 'mall'  >>> stroka[0] = 'b'  Traceback (most recent call last):    File "<pyshell>", line 1, in <module>  TypeError: 'str' object does not support item assignment  

Но заменить любой символ все-таки можно – для этого придется воспользоваться срезами и конкатенацией. Результатом станет новая строка:

>>> stroka = 'mall'  >>> stroka = 'b' + stroka[1:]  >>> print(stroka)  ball  

Более простой способ «замены» символа или подстроки – использование метода replace(), который мы рассмотрим ниже.

Полезные методы строк

Python предоставляет множество методов для работы с текстовыми данными. Все методы можно сгруппировать в четыре категории:

  • Преобразование строк.
  • Оценка и классификация строк.
  • Конвертация регистра.
  • Поиск, подсчет и замена символов.

Рассмотрим эти методы подробнее.

Преобразование строк

Три самых используемых метода из этой группы – join()split() и partition(). Метод join() незаменим, если нужно преобразовать список или кортеж в строку:

>>> spisok = ['Я', 'изучаю', 'Python']  >>> stroka = ' '.join(spisok)  >>> print(stroka)  Я изучаю Python  

При объединении списка или кортежа в строку можно использовать любые разделители:

>>> kort = ('Я', 'изучаю', 'Django')  >>> stroka = '***'.join(kort)  >>> print(stroka)  Я***изучаю***Django  

Метод split() используется для обратной манипуляции – преобразования строки в список:

>>> text = 'это пример текста для преобразования в список'  >>> spisok = text.split()  >>> print(spisok)  ['это', 'пример', 'текста', 'для', 'преобразования', 'в', 'список']  

По умолчанию split() разбивает строку по пробелам. Но можно указать любой другой символ – и на практике это часто требуется:

>>> text = 'цвет: синий; вес: 1 кг; размер: 30х30х50; материал: картон'  >>> spisok = text.split(';')  >>> print(spisok)  ['цвет: синий', ' вес: 1 кг', ' размер: 30х30х50', ' материал: картон']  

Метод partition() поможет преобразовать строку в кортеж:

>>> text = 'Python - простой и понятный язык'  >>> kort = text.partition('и')  >>> print(kort)  ('Python - простой ', 'и', ' понятный язык')  

В отличие от split()partition() учитывает только первое вхождение элемента-разделителя (и добавляет его в итоговый кортеж).

Оценка и классификация строк

В Python много встроенных методов для оценки и классификации текстовых данных. Некоторые из этих методов работают только со строками, в то время как другие универсальны. К последним относятся, например, функции min() и max():

>>> text = '12345'  >>> print(min(text))  1  >>> print(max(text))  5    

В Python есть специальные методы для определения типа символов. Например, isalnum() оценивает, состоит ли строка из букв и цифр, либо в ней есть какие-то другие символы:

>>> text = 'abracadabra123456'  >>> print(text.isalnum())  True  >>> text1 = 'a*b$ra cadabra'  >>> print(text1.isalnum())  False  

Метод isalpha() поможет определить, состоит ли строка только из букв, или включает специальные символы, пробелы и цифры:

>>> text = 'программирование'  >>> print(text.isalpha())  True  >>> text2 = 'password123'  >>> print(text2.isalpha())  False  

С помощью метода isdigit() можно определить, входят ли в строку только цифры, или там есть и другие символы:

>>> text = '1234567890'  >>> print(text.isdigit())  True  >>> text2 = '123456789o'  >>> print(text2.isdigit())  False  

Поскольку вещественные числа содержат точку, а отрицательные – знак минуса, выявить их этим методом не получится:

>>> text = '5.55'  >>> print(text.isdigit())  False  >>> text1 = '-5'  >>> print(text1.isdigit())  False

Если нужно определить наличие в строке дробей или римских цифр, подойдет метод isnumeric():

>>> text = '½⅓¼⅕⅙'  >>> print(text.isdigit())  False  >>> print(text.isnumeric())  True  

Методы islower() и isupper() определяют регистр, в котором находятся буквы. Эти методы игнорируют небуквенные символы:

>>> text = 'abracadabra'  >>> print(text.islower())  True  >>> text2 = 'Python bytes'  >>> print(text2.islower())  False  >>> text3 = 'PYTHON'  >>> print(text3.isupper())  True  

Метод isspace() определяет, состоит ли анализируемая строка из одних пробелов, или содержит что-нибудь еще:

>>> stroka = '   '  >>> print(stroka.isspace())  True  >>> stroka2 = '  a  '  >>> print(stroka2.isspace())  False  

Конвертация регистра

Как уже говорилось выше, строки относятся к неизменяемым типам данных, поэтому результатом любых манипуляций, связанных с преобразованием регистра или удалением (заменой) символов будет новая строка.

Из всех методов, связанных с конвертацией регистра, наиболее часто используются на практике два – lower() и upper(). Они преобразуют все символы в нижний и верхний регистр соответственно:

>>> text = 'этот текст надо написать заглавными буквами'  >>> print(text.upper())  ЭТОТ ТЕКСТ НАДО НАПИСАТЬ ЗАГЛАВНЫМИ БУКВАМИ  >>> text = 'зДесь ВСе букВы рАзныЕ, а НУжнЫ проПИСНыЕ'  >>> print(text.lower())  здесь все буквы разные, а нужны прописные  

Иногда требуется преобразовать текст так, чтобы с заглавной буквы начиналось только первое слово предложения:

>>> text = 'предложение должно начинаться с ЗАГЛАВНОЙ буквы.'  >>> print(text.capitalize())  Предложение должно начинаться с заглавной буквы.  

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

>>> text = 'пРИМЕР иСПОЛЬЗОВАНИЯ swapcase'  >>> print(text.swapcase())  Пример Использования SWAPCASE  >>> text2 = 'тот случай, когда нужен метод title'  >>> print(text2.title())  Тот Случай, Когда Нужен Метод Title  

Поиск, подсчет и замена символов

Методы find() и rfind() возвращают индекс стартовой позиции искомой подстроки. Оба метода учитывают только первое вхождение подстроки. Разница между ними заключается в том, что find() ищет первое вхождение подстроки с начала текста, а rfind() – с конца:

>>> text = 'пример текста, в котором нужно найти текстовую подстроку'  >>> print(text.find('текст'))  7  >>> print(text.rfind('текст'))  37  

Такие же результаты можно получить при использовании методов index() и rindex() – правда, придется предусмотреть обработку ошибок, если искомая подстрока не будет обнаружена:

>>> text = 'Съешь еще этих мягких французских булок!'  >>> print(text.index('еще'))  6  >>> print(text.rindex('чаю'))  Traceback (most recent call last):    File "<pyshell>", line 1, in <module>  ValueError: substring not found  

Если нужно определить, начинается ли строка с определенной подстроки, поможет метод startswith():

>>> text = 'Жила-была курочка Ряба'  >>> print(text.startswith('Жила'))  True  

Чтобы проверить, заканчивается ли строка на нужное окончание, используют endswith():

>>> text = 'В конце всех ждал хэппи-енд'  >>> print(text.endswith('енд'))  True  

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

>>> text = 'Съешь еще этих мягких французских булок, да выпей же чаю!'  >>> print(text.count('е'))  5  >>> print(text.count('е', 5, 25))  2  

Методы strip()lstrip() и rstrip() предназначены для удаления пробелов. Метод strip() удаляет пробелы в начале и конце строки, lstrip() – только слеваrstrip() – только справа:

>>> text = '    здесь есть пробелы и слева, и справа    '  >>> print('***', text.strip(), '***')  *** здесь есть пробелы и слева, и справа ***  >>> print('***', text.lstrip(), '***')  *** здесь есть пробелы и слева, и справа     ***  >>> print('***', text.rstrip(), '***')  ***     здесь есть пробелы и слева, и справа ***

Метод replace() используют для замены символов или подстрок. Можно указать нужное количество замен, а сам символ можно заменить на пустую подстроку – проще говоря, удалить:

>>> text = 'В этой строчке нужно заменить только одну "ч"'  >>> print(text.replace('ч', '', 1))  В этой строке нужно заменить только одну "ч"  

Стоит заметить, что метод replace() подходит лишь для самых простых вариантов замены и удаления подстрок.


Вернуться:

Извините, но на данный момент нам нечего вам показать. Попробуйте использовать другой фильтр или зайти попозже.