Как изменить строку пайтон

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

В уроке по присвоению типа переменной в Python вы могли узнать, как определять строки: объекты, состоящие из последовательности символьных данных. Обработка строк неотъемлемая частью программирования на python. Крайне редко приложение, не использует строковые типы данных.

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

Ниже рассмотрим операторы, методы и функции, доступные для работы с текстом.

Строковые операторы

Вы уже видели операторы + и * в применении их к числовым значениям в уроке по операторам в Python . Эти два оператора применяются и к строкам.

Оператор сложения строк +

+ — оператор конкатенации строк. Он возвращает строку, состоящую из других строк, как показано здесь:

>>> s = 'py'
>>> t = 'th'
>>> u = 'on'

>>> s + t
'pyth'
>>> s + t + u
'python'

>>> print('Привет, ' + 'Мир!')
Go team!!!

Оператор умножения строк *

* — оператор создает несколько копий строки. Если s это строка, а n целое число, любое из следующих выражений возвращает строку, состоящую из n объединенных копий s:

s * n
n * s

Вот примеры умножения строк:

>>> s = 'py.'

>>> s * 4
'py.py.py.py.'
>>> 4 * s
'py.py.py.py.'

Значение множителя n должно быть целым положительным числом. Оно может быть нулем или отрицательным, но этом случае результатом будет пустая строка:

>>> 'py' * -6
''

Если вы создадите строковую переменную и превратите ее в пустую строку, с помощью 'py' * -6, кто-нибудь будет справедливо считать вас немного глупым. Но это сработает.

Оператор принадлежности подстроки in

Python также предоставляет оператор принадлежности, который можно использоваться для манипуляций со строками. Оператор in возвращает True, если подстрока входит в строку, и False, если нет:

>>> s = 'Python'
>>> s in 'I love Python.'
True
>>> s in 'I love Java.'
False

Есть также оператор not in, у которого обратная логика:

>>> 'z' not in 'abc'
True
>>> 'z' not in 'xyz'
False

Python предоставляет множество функций, которые встроены в интерпретатор. Вот несколько, которые работают со строками:

Функция Описание
chr() Преобразует целое число в символ
ord() Преобразует символ в целое число
len() Возвращает длину строки
str() Изменяет тип объекта на string

Более подробно о них ниже.

Функция ord(c) возвращает числовое значение для заданного символа.

На базовом уровне компьютеры хранят всю информацию в виде цифр. Для представления символьных данных используется схема перевода, которая содержит каждый символ с его репрезентативным номером.

Самая простая схема в повседневном использовании называется ASCII . Она охватывает латинские символы, с которыми мы чаще работает. Для этих символов ord(c) возвращает значение ASCII для символа c:

>>> ord('a')
97
>>> ord('#')
35

ASCII прекрасен, но есть много других языков в мире, которые часто встречаются. Полный набор символов, которые потенциально могут быть представлены в коде, намного больше обычных латинских букв, цифр и символом.

Unicode — это современный стандарт, который пытается предоставить числовой код для всех возможных символов, на всех возможных языках, на каждой возможной платформе. Python 3 поддерживает Unicode, в том числе позволяет использовать символы Unicode в строках.

Функция ord() также возвращает числовые значения для символов Юникода:

>>> ord('€')
8364
>>> ord('∑')
8721

Функция chr(n) возвращает символьное значение для данного целого числа.

chr() действует обратно ord(). Если задано числовое значение n, chr(n) возвращает строку, представляющую символ n:

>>> chr(97)
'a'
>>> chr(35)
'#'

chr() также обрабатывает символы Юникода:

>>> chr(8364)
'€'
>>> chr(8721)
'∑'

Функция len(s) возвращает длину строки.

len(s) возвращает количество символов в строке s:

>>> s = 'Простоя строка.'
>>> len(s)
15

Функция str(obj) возвращает строковое представление объекта.

Практически любой объект в Python может быть представлен как строка. str(obj) возвращает строковое представление объекта obj:

>>> str(49.2)
'49.2'
>>> str(3+4j)
'(3+4j)'
>>> str(3 + 29)
'32'
>>> str('py')
'py'

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

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

В Python строки являются упорядоченными последовательностями символьных данных и могут быть проиндексированы. Доступ к отдельным символам в строке можно получить, указав имя строки, за которым следует число в квадратных скобках [].

Индексация строк начинается с нуля: у первого символа индекс 0, следующего 1 и так далее. Индекс последнего символа в python — ‘‘длина строки минус один’’.

Например, схематическое представление индексов строки 'foobar' выглядит следующим образом:

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

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

>>> s = 'foobar'

>>> s[0]
'f'
>>> s[1]
'o'
>>> s[3]
'b'
>>> s[5]
'r'

Попытка обращения по индексу большему чем len(s) - 1, приводит к ошибке IndexError:

>>> s[6]
Traceback (most recent call last):
  File "", line 1, in <module>
    s[6]
IndexError: string index out of range

Индексы строк также могут быть указаны отрицательными числами. В этом случае индексирование начинается с конца строки: -1 относится к последнему символу, -2 к предпоследнему и так далее. Вот такая же диаграмма, показывающая как положительные, так и отрицательные индексы строки 'foobar':

положительные и отрицательные индексы строки

Вот несколько примеров отрицательного индексирования:

>>> s = 'foobar'
>>> s[-1]
'r'
>>> s[-2]
'a'
>>> len(s)
6
>>> s[-len(s)] # отрицательная индексация начинается с -1
'f'

Попытка обращения по индексу меньшему чем -len(s), приводит к ошибке IndexError:

>>> s[-7]
Traceback (most recent call last):
  File "", line 1, in <module>
    s[-7]
IndexError: string index out of range

Для любой непустой строки s, код s[len(s)-1] и s[-1] возвращают последний символ. Нет индекса, который применим к пустой строке.

Срезы строк

Python также допускает возможность извлечения подстроки из строки, известную как ‘‘string slice’’. Если s это строка, выражение формы s[m:n] возвращает часть s, начинающуюся с позиции m, и до позиции n, но не включая позицию:

>>> s = 'python'
>>> s[2:5]
'tho'

Помните: индексы строк в python начинаются с нуля. Первый символ в строке имеет индекс 0. Это относится и к срезу.

Опять же, второй индекс указывает символ, который не включен в результат. Символ 'n' в приведенном выше примере. Это может показаться немного не интуитивным, но дает результат: выражение s[m:n] вернет подстроку, которая является разницей n - m, в данном случае 5 - 2 = 3.

Если пропустить первый индекс, срез начинается с начала строки. Таким образом, s[:m] = s[0:m]:

>>> s = 'python'
>>> s[:4]
'pyth'
>>> s[0:4]
'pyth'

Аналогично, если опустить второй индекс s[n:], срез длится от первого индекса до конца строки. Это хорошая, лаконичная альтернатива более громоздкой s[n:len(s)]:

>>> s = 'python'
>>> s[2:]
'thon'
>>> s[2:len(s)]
'thon'

Для любой строки s и любого целого n числа (0 ≤ n ≤ len(s)), s[:n] + s[n:]будет s:

>>> s = 'python'
>>> s[:4] + s[4:]
'python'
>>> s[:4] + s[4:] == s
True

Пропуск обоих индексов возвращает исходную строку. Это не копия, это ссылка на исходную строку:

>>> s = 'python'
>>> t = s[:]
>>> id(s)
59598496
>>> id(t)
59598496
>>> s is t
True

Если первый индекс в срезе больше или равен второму индексу, Python возвращает пустую строку. Это еще один не очевидный способ сгенерировать пустую строку, если вы его искали:

>>> s[2:2]
''
>>> s[4:2]
''

Отрицательные индексы можно использовать и со срезами. Вот пример кода Python:

>>> s = 'python'
>>> s[-5:-2]
'yth'
>>> s[1:4]
'yth'
>>> s[-5:-2] == s[1:4]
True

Шаг для среза строки

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

Например , для строки 'python' срез 0:6:2 начинается с первого символа и заканчивается последним символом (всей строкой), каждый второй символ пропускается. Это показано на следующей схеме:

срез строки python с шагом 2

Иллюстративный код показан здесь:

>>> s = 'foobar'
>>> s[0:6:2]
'foa'
>>> s[1:6:2]
'obr'

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

>>> s = '12345' * 5
>>> s
'1234512345123451234512345'
>>> s[::5]
'11111'
>>> s[4::5]
'55555'

Вы также можете указать отрицательное значение шага, в этом случае Python идет с конца строки. Начальный/первый индекс должен быть больше конечного/второго индекса:

>>> s = 'python'
>>> s[5:0:-2]
'nhy'

В приведенном выше примере, 5:0:-2 означает «начать с последнего символа и делать два шага назад, но не включая первый символ.”

Когда вы идете назад, если первый и второй индексы пропущены, значения по умолчанию применяются так: первый индекс — конец строки, а второй индекс — начало. Вот пример:

>>> s = '12345' * 5
>>> s
'1234512345123451234512345'
>>> s[::-5]
'55555'

Это общая парадигма для разворота (reverse) строки:

>>> s = 'Если так говорит товарищ Наполеон, значит, так оно и есть.'
>>> s[::-1]
'.ьтсе и оно кат ,тичанз ,ноелопаН щиравот тировог кат илсЕ'

Форматирование строки

В Python версии 3.6 был представлен новый способ форматирования строк. Эта функция официально названа литералом отформатированной строки, но обычно упоминается как f-string.

Возможности форматирования строк огромны и не будут подробно описана здесь.
Одной простой особенностью f-строк, которые вы можете начать использовать сразу, является интерполяция переменной. Вы можете указать имя переменной непосредственно в f-строковом литерале (f'string'), и python заменит имя соответствующим значением.

Например, предположим, что вы хотите отобразить результат арифметического вычисления. Это можно сделать с помощью простого print() и оператора ,, разделяющего числовые значения и строковые:

>>> n = 20
>>> m = 25
>>> prod = n * m
>>> print('Произведение', n, 'на', m, 'равно', prod)
Произведение 20 на 25 равно 500

Но это громоздко. Чтобы выполнить то же самое с помощью f-строки:

  • Напишите f или F перед кавычками строки. Это укажет python, что это f-строка вместо стандартной.
  • Укажите любые переменные для воспроизведения в фигурных скобках ({}).

Код с использованием f-string, приведенный ниже выглядит намного чище:

>>> n = 20
>>> m = 25
>>> prod = n * m
>>> print(f'Произведение {n} на {m} равно {prod}')
Произведение 20 на 25 равно 500

Любой из трех типов кавычек в python можно использовать для f-строки:

>>> var = 'Гав'
>>> print(f'Собака говорит {var}!')
Собака говорит Гав!
>>> print(f"Собака говорит {var}!")
Собака говорит Гав!
>>> print(f'''Собака говорит {var}!''')
Собака говорит Гав!

Изменение строк

Строки — один из типов данных, которые Python считает неизменяемыми, что означает невозможность их изменять. Как вы ниже увидите, python дает возможность изменять (заменять и перезаписывать) строки.

Такой синтаксис приведет к ошибке TypeError:

>>> s = 'python'
>>> s[3] = 't'
Traceback (most recent call last):
  File "", line 1, in <module>
    s[3] = 't'
TypeError: 'str' object does not support item assignment

На самом деле нет особой необходимости изменять строки. Обычно вы можете легко сгенерировать копию исходной строки с необходимыми изменениями. Есть минимум 2 способа сделать это в python. Вот первый:

>>> s = s[:3] + 't' + s[4:]
>>> s
'pytton'

Есть встроенный метод string.replace(x, y):

>>> s = 'python'
>>> s = s.replace('h', 't')
>>> s
'pytton'

Читайте дальше о встроенных методах строк!

Встроенные методы строк в 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 содержит хотя бы один специальный символ. Не алфавитные символы игнорируются:

>>> 'atb'.isprintable() # t - символ табуляции
False
>>> 'a b'.isprintable()
True
>>> ''.isprintable()
True
>>> 'anb'.isprintable() # n - символ перевода строки
False

Важно: Это единственный .is****() метод, который возвращает True, если s пустая строка. Все остальные возвращаются False.

string.isspace() определяет, состоит ли строка только из пробельных символов.

s.isspace() возвращает True, если s не пустая строка, и все символы являются пробельными, а False, если нет.

Наиболее часто встречающиеся пробельные символы — это пробел ' ', табуляция 't' и новая строка 'n':

>>> ' t  n '.isspace()
True
>>> ' a '.isspace()
False

Тем не менее есть несколько символов ASCII, которые считаются пробелами. И если учитывать символы Юникода, их еще больше:

>>> 'fu2005r'.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 пробелов:

>>> 'atbtc'.expandtabs()
'a       b       c'
>>> 'aaatbbbtc'.expandtabs()
'aaa     bbb     c'

tabsize необязательный параметр, задающий количество пробелов:

>>> 'atbtc'.expandtabs(4)
'a   b   c'
>>> 'aaatbbbtc'.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   '
>>> 'tnfootnbartnbaz'.lstrip()
'footnbartnbaz'

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

>>> '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'
>>> 'footnbartnbaztn'.rstrip()
'footnbartnbaz'

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

>>> 'foo.$$$;'.rstrip(';$.')
'foo'

string.strip([]) удаляет символы с левого и правого края строки.

s.strip() эквивалентно последовательному вызову s.lstrip()и s.rstrip(). Без аргумента метод удаляет пробелы в начале и в конце:

>>> s = '   foo bar bazttt'
>>> s = s.lstrip()
>>> s = s.rstrip()
>>> s
'foo bar baz'

Как в .lstrip() и .rstrip(), необязательный аргумент определяет набор символов, которые будут удалены:

>>> 'www.pythonru.com'.strip('w.moc')
'pythonru'

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

>>> '   foo bar bazttt'.lstrip().rstrip()
'foo bar baz'
>>> '   foo bar bazttt'.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']
>>> 'foontbar   bazrfqux'.rsplit()
['foo', 'bar', 'baz', 'qux']

Если указан, он используется в качестве разделителя:

>>> 'foo.bar.baz.qux'.rsplit(sep='.')
['foo', 'bar', 'baz', 'qux']

Если = None, строка разделяется пробелами, как если бы не был указан вообще.

Когда явно указан в качестве разделителя s, последовательные повторы разделителя будут возвращены как пустые строки:

>>> 'foo...bar'.rsplit(sep='.')
['foo', '', '', 'bar']

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

>>> 'footttbar'.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 на строки и возвращает их в списке. Любой из следующих символов или последовательностей символов считается границей строки:

Разделитель Значение
n Новая строка
r Возврат каретки
rn Возврат каретки + перевод строки
v или же x0b Таблицы строк
f или же x0c Подача формы
x1c Разделитель файлов
x1d Разделитель групп
x1e Разделитель записей
x85 Следующая строка
u2028 Новая строка (Unicode)
u2029 Новый абзац (Unicode)

Вот пример использования нескольких различных разделителей строк:

>>> 'foonbarrnbazfquxu2028quux'.splitlines()
['foo', 'bar', 'baz', 'qux', 'quux']

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

>>> 'foofffbar'.splitlines()
['foo', '', '', 'bar']

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

>>> 'foonbarnbaznqux'.splitlines(True)
['foon', 'barn', 'bazn', 'qux']
>>> 'foonbarnbaznqux'.splitlines(8)
['foon', 'barn', 'bazn', 'qux']

Заключение

В этом руководстве было подробно рассмотрено множество различных механизмов, которые Python предоставляет для работы со строками, включая операторы, встроенные функции, индексирование, срезы и встроенные методы.

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

  • Списки python
  • Кортежи (tuple)
S = ‘str’; S = «str»; S = »’str»’; S = «»»str»»» Литералы строк S = «snptanbbb» Экранированные последовательности S = r»C:tempnew» Неформатированные строки (подавляют экранирование) S = b»byte» Строка байтов S1 + S2 Конкатенация (сложение строк) S1 * 3 Повторение строки S[i] Обращение по индексу S[i:j:step] Извлечение среза len(S) Длина строки S.find(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или -1 S.rfind(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или -1 S.index(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError S.rindex(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError S.replace(шаблон, замена[, maxcount]) Замена шаблона на замену. maxcount ограничивает количество замен S.split(символ) Разбиение строки по разделителю S.isdigit() Состоит ли строка из цифр S.isalpha() Состоит ли строка из букв S.isalnum() Состоит ли строка из цифр или букв S.islower() Состоит ли строка из символов в нижнем регистре S.isupper() Состоит ли строка из символов в верхнем регистре S.isspace() Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы (‘f’), «новая строка» (‘n’), «перевод каретки» (‘r’), «горизонтальная табуляция» (‘t’) и «вертикальная табуляция» (‘v’)) S.istitle() Начинаются ли слова в строке с заглавной буквы S.upper() Преобразование строки к верхнему регистру S.lower() Преобразование строки к нижнему регистру S.startswith(str) Начинается ли строка S с шаблона str S.endswith(str) Заканчивается ли строка S шаблоном str S.join(список) Сборка строки из списка с разделителем S ord(символ) Символ в его код ASCII chr(число) Код ASCII в символ S.capitalize() Переводит первый символ строки в верхний регистр, а все остальные в нижний S.center(width, [fill]) Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию) S.count(str, [start],[end]) Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию) S.expandtabs([tabsize]) Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам S.lstrip([chars]) Удаление пробельных символов в начале строки S.rstrip([chars]) Удаление пробельных символов в конце строки S.strip([chars]) Удаление пробельных символов в начале и в конце строки S.partition(шаблон) Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки S.rpartition(sep) Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку S.swapcase() Переводит символы нижнего регистра в верхний, а верхнего – в нижний S.title() Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний S.zfill(width) Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями S.ljust(width, fillchar=» «) Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar S.rjust(width, fillchar=» «) Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar S.format(*args, **kwargs) Форматирование строки

Текстовые переменные 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 поддерживает два типа индексации – положительную, при которой отсчет элементов начинается с 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() подходит лишь для самых простых вариантов замены и удаления подстрок. В более сложных случаях необходимо использование регулярных выражений, которые мы будем изучать позже.

Практика

Задание 1

Напишите программу, которая получает на вход строку и выводит:

  • количество символов, содержащихся в тексте;
  • True или False в зависимости от того, являются ли все символы буквами и цифрами.

Решение:

        text = input()
print(len(text))
print(text.isalpha())

    

Задание 2

Напишите программу, которая получает на вход слово и выводит True, если слово является палиндромом, или False в противном случае. Примечание: для сравнения в Python используется оператор ==.

Решение:

        text = input().lower()
print(text == text[::-1])

    

Задание 3

Напишите программу, которая получает строку с именем, отчеством и фамилией, написанными в произвольном регистре, и выводит данные в правильном формате. Например, строка алеКСандр СЕРГЕЕВИЧ ПушкиН должна быть преобразована в Александр Сергеевич Пушкин.

Решение:

        text = input()
print(text.title())

    

Задание 4

Имеется строка 12361573928167047230472012. Напишите программу, которая преобразует строку в текст один236один573928один670472304720один2.

Решение:

        text = '12361573928167047230472012'
print(text.replace('1', 'один'))

    

Задание 5

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

Пример ввода:

        Алексей
Константинович
Романов
бухгалтер

    

Вывод:

        А. К. Романов, бухгалтер
    

Решение:

        first_name, patronymic, last_name, position = input(), input(), input(), input()
print(first_name[0] + '.', patronymic[0] + '.', last_name + ',', position)

    

Задание 6

Напишите программу, которая получает на вход строку текста и букву, а затем определяет, встречается ли данная буква (в любом регистре) в тексте. В качестве ответа программа должна выводить True или False.

Пример ввода:

        ЗонтИК
к

    

Вывод:

        True
    

Решение:

        text = input().lower()
letter = input()
print(letter in text)

    

Задание 7

Напишите программу, которая определяет, является ли введенная пользователем буква гласной. В качестве ответа программы выводит True или False, буквы могут быть как в верхнем, так и в нижнем регистре.

Решение:

        vowels = 'аиеёоуыэюя'
letter = input().lower()
print(letter in vowels)

    

Задание 8

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

Пример ввода:

        Шесть шустрых мышат в камышах шуршат
ша

    

Вывод:

        16 33
    

Решение:

        text, letter = input().lower(), input()
print(text.find(letter), text.rfind(letter))

    

Задание 9

Напишите программу для подсчета количества пробелов и непробельных символов в введенной пользователем строке.

Пример ввода:

        В роще, травы шевеля, мы нащиплем щавеля
    

Вывод:

        Количество пробелов: 6, количество других символов: 34
    

Решение:

        text = input()
nospace = text.replace(' ', '')
print(f"Количество пробелов: {text.count(' ')}, количество других символов: {len(nospace)}")

    

Задание 10

Напишите программу, которая принимает строку и две подстроки start и end, а затем определяет, начинается ли строка с фрагмента start, и заканчивается ли подстрокой end. Регистр не учитывать.

Пример ввода:

        Программирование на Python - лучшее хобби
про
про

    

Вывод:

        True
False

    

Решение:

        text, start, end = input().lower(), input(), input()
print(text.startswith(start))
print(text.endswith(end))

    

Подведем итоги

В этой части мы рассмотрели самые популярные методы работы со строками – они пригодятся для решения тренировочных задач и в разработке реальных проектов. В следующей статье будем разбирать методы работы со списками.

***

📖 Содержание самоучителя

  1. Особенности, сферы применения, установка, онлайн IDE
  2. Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
  3. Типы данных: преобразование и базовые операции
  4. Методы работы со строками
  5. Методы работы со списками и списковыми включениями
  6. Методы работы со словарями и генераторами словарей
  7. Методы работы с кортежами
  8. Методы работы со множествами
  9. Особенности цикла for
  10. Условный цикл while
  11. Функции с позиционными и именованными аргументами
  12. Анонимные функции
  13. Рекурсивные функции
  14. Функции высшего порядка, замыкания и декораторы
  15. Методы работы с файлами и файловой системой

***

Материалы по теме

  • ТОП-15 трюков в Python 3, делающих код понятнее и быстрее

В языке Python строки — это тип данных, который используется для представления текста. Это один из базовых типов, с которым мы имеем дело в каждом проекте на Python.

Данная статья является полным руководством по использованию строк в Python. Прочитав ее, вы узнаете, как создавать строки и работать с ними. В частности, мы рассмотрим:

  • создание строк
  • индексацию строк
  • работу с подстроками
  • использование методов строк

И не только это!

В Python вы можете создать строку, используя двойные или одинарные кавычки.

Например:

name = "Alice"
hobby = 'golf'

Когда дело доходит до выбора одинарных или двойных кавычек, нужно быть последовательным. То есть вы можете использовать и те, и другие, но придерживайтесь одного стиля во всем проекте.

Применять строки и производить различные манипуляции с ними вам придется часто. Что касается «манипуляций», со строками можно делать множество вещей. Например, объединять, нарезать, изменять, находить подстроки и многое другое.

Далее поговорим об операторах строк.

Операторы строк

Возможно вы уже знаете об основных математических операторах Python.

От редакции Pythonist. На эту тему у нас есть статья «Операторы в Python».

С известной аккуратностью операторы сложения и умножения можно также применять и для строк:

  • при помощи оператора сложения можно сложить две строки или более
  • при помощи оператора умножения можно умножать строки.

В дополнении к этим двум операторам есть еще один, очень полезный. Он называется оператор in. С его помощью можно проверить, содержит ли строка определенную подстроку или символ.

Давайте рассмотрим подробнее, как работают эти операторы.

Оператор +

В Python вы можете объединить две или более строк с помощью оператора сложения (+).

Например:

part1 = "some"
part2 = "where"
word = part1 + part2
print(word)

# Результат:
# somewhere

Оператор *

Чтобы умножать строки в Python, можно использовать оператор умножения (*).

Например:

word = "hello"
threeWords = word * 3
print(threeWords)

# Результат:
# hellohellohello

Оператор in

В Python оператор in можно использовать для проверки нахождения подстроки в строке.

Другими словами, с его помощью можно узнать, есть ли внутри строки определенное слово или символ.

Оператор in возвращает значение True, если внутри строки есть проверяемая подстрока. В противном случае возвращается значение False.

Например:

sentence = "This is just a test"
testFound = "test" in sentence
print(testFound)

# Результат:
# True

Теперь давайте рассмотрим другой пример. На этот раз проверим, есть ли в слове определенный символ:

word = "Hello"
eFound = "e" in word
print(eFound)

# Результат:
# True

Далее поговорим про индексацию строк.

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

В Python строка представляет собой набор символов. Каждый символ строки имеет индекс — порядковый номер.

Благодаря этой индексации можно получить доступ к конкретному символу в данной строке, что весьма удобно.

Индексация строк Python начинается с нуля.

Это означает, что 1-й символ строки имеет индекс 0, 2-й символ имеет индекс 1 и так далее.

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

string[i].

Это выражение возвращает i-й символ строки. Например:

word = "Hello"
c1 = word[0]
print(c1)

# Результат:
# H

Если индекс выходит за пределы длины строки, вы увидите ошибку IndexError.

Давайте рассмотрим следующий пример.

Новичку в программировании может быть трудно запомнить, что индексация начинается с 0. Например, последний символ строки из 5 символов имеет индекс 4. Но давайте посмотрим, что произойдет, если вы вдруг подумаете, что это 5:

word = "Hello"
last = word[5]
print(last)

# Результат:
# IndexError: string index out of range

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

Это потому, что с индексом 5 мы пытаемся получить доступ к 6-му элементу. Но поскольку данная строка имеет только 5 символов, доступ к 6-му с треском проваливается.

Таким образом, следует быть осторожным и не пытаться получить доступ к отсутствующему элементу строки.

Нарезка (slicing) строк

Из предыдущего раздела стало ясно как получить доступ к определенному символу строки.

Но иногда требуется получить доступ к определенному диапазону внутри строки.

Сделать это можно при помощи так называемой нарезки строк.

Самый простой вариант операции нарезки требует указания начального и конечного индекса:

string[start:end].

Результатом является срез символов исходной строки. В него входят символы от начального до конечного индекса (при этом символ с конечным индексом в срез не входит).

Например, возьмем первые три буквы строки:

word = "Hello"
firstThree = word[0:3]
print(firstThree)

# Результат:
# Hel
В срез 0:3 включены 1-й, 2-й и 3-й элементы. А вот 4-й элемент (под индексом 3) исключен.

Полный синтаксис оператора среза включает в себя параметр шага и имеет следующий вид:

string[start:end:step].

Параметр шага (step) указывает, через сколько символов следует перепрыгивать. По умолчанию он равен 1, как вы наверно уже догадались.

Например, возьмем каждый второй символ из первых 8 символов строки:

word = "Hello world"
firstThree = word[0:8:2]
print(firstThree)

# Результат:
# Hlow

Теперь вы должны понимать основные принципы нарезки строк в Python.

На практике срезы применяются очень разнообразно. Например, некоторые или даже все параметры среза можно опускать, а отсчет символов может идти в обратном направлении.

Но чтобы не раздувать материал, здесь мы не будем вдаваться в детали срезов.

Встраивание переменных внутрь строки

Довольно часто возникает необходимость добавить переменные внутрь строки Python.

Для этого можно использовать F-строки. F-строка означает просто «форматированная строка». Она позволяет нам аккуратно размещать код внутри строки.

Чтобы создать F-строку, нужно добавить символ f непосредственно перед строкой и обозначить фигурными скобками код, внедряемый в строку.

Например:

name = "Alice"
greeting = f"Hello, {name}! How are you doing?"
print(greeting)

# Результат:
# Hello, Alice! How are you doing?

Как можно заметить, это аккуратным образом встраивает в строку имя, хранящееся в переменной name. Благодаря этому нам не нужно разбивать строку на три части, что было бы несколько неудобно.

Давайте рассмотрим еще один пример, чтобы убедиться, что внутри F-строки можно также запускать код:

calculation = f"5 * 6 = {5 * 6}."
print(calculation)

# Результат:
# 5 * 6 = 30

От редакции Pythonist: на тему форматирования строк у нас есть отдельная статья — «​​Форматирование строк».

Изменение строк

В языке Python строки изменять нельзя.

Это связано с тем, что строки относятся к неизменяемым типам данных и представляет собой неизменяемые наборы символов.

От редакции Pythonist: на тему изменяемости объектов в Python рекомендуем почитать статью «Python 3: изменяемый, неизменяемый…».

Новичков это может несколько сбивать с толку.

Но изменять именно исходную строку приходится не часто, так что особых проблем неизменяемость строк не вызывает.

Если вам нужна измененная строка, можно просто создать новую строку из исходной с уже внесенными в нее изменениями. То есть новая строка является просто модифицированной копией исходной версии нашей строки.

На самом деле существует множество полезных встроенных методов для изменения строк. Эти методы помогают решить большинство повседневных задач.

И оставшаяся часть данной статьи будет посвящена именно этим методам.

Методы строк в языке Python

Во встроенном в Python модуле string есть множество удобных методов, которые можно использовать для работы со строками.

Они делают жизнь программиста гораздо проще.

Эти методы предназначены для решения самых общих задач, связанных как с изменением строк, так и с работой со строками в целом.

Например, можно заменить символ в строке при помощи метода replace(). Без этого метода это было бы не так просто сделать. Вам пришлось бы реализовать собственную логику для замены символа, так как непосредственное изменение строки невозможно.

И таких методов в Python довольно много. Если быть точными, то их 47. Не пытайтесь запомнить их все. Лучше почитайте про каждый из этих методов и попробуйте применить их.

Можно также добавить данную статью в закладки и возвращаться к ней потом по мере надобности.

Следующая таблица представляет собой шпаргалку с методами строк в Python. А ниже этой таблицы вы найдете более подробное описание каждого метода и пару полезных примеров по нему:

Имя метода Описание метода
capitalize Преобразует первый символ строки в верхний регистр.
casefold Преобразует строку в нижний регистр. Поддерживает больше вариантов, чем метод lower(). Используется при локализации либо глобализации строк.
center Возвращает центрированную строку.
count Возвращает количество вхождений символа или подстроки в строке.
encode Производит кодировку строки.
endswith Проверяет, заканчивается ли строка определенным символом либо определенной подстрокой.
expandtabs Указывает размер табуляции для строки и возвращает его.
find Ищет определенный символ или подстроку. Возвращает позицию, где он был впервые обнаружен.
format Старый способ добавления переменных внутрь строки (выше мы рассмотрели современный метод F-строк). Форматирует строку, встраивая в нее значения и возвращая результат.
format_map Форматирует определенные значения в строке.
index Ищет символ или подстроку в строке. Возвращает индекс, по которому он был впервые обнаружен.
isalnum Проверяет, все ли символы строки являются буквенно-цифровыми.
isalpha Проверяет, все ли символы строки являются буквенными.
isascii Проверяет, все ли символы строки являются символами ASCII.
isdecimal Проверяет, все ли символы строки являются десятичными числами.
isdigit Проверяет, все ли символы строки являются цифрами.
isidentifier Проверяет, является ли строка идентификатором.
islower Проверяет, все ли символы строки находятся в нижнем регистре.
isnumeric Проверяет, все ли символы строки являются числами.
isprintable Проверяет, все ли символы строки доступны для печати.
isspace Проверяет, все ли символы строки являются пробелами.
istitle Проверяет, соответствует ли строка правилам написания заголовков (каждое слово начинается с заглавной буквы).
isupper Проверяет, все ли символы строки находятся в верхнем регистре.
join Соединяет элементы итерируемого объекта (например, списка) в одну строку.
ljust Возвращает выровненную по левому краю версию строки.
lower Приведение всех символов строки к нижнему регистру.
lstrip Удаляет пробелы слева от строки.
maketrans Создает таблицу преобразования символов (для метода translate()).
partition Разбивает строку на три части. Искомая центральная часть указывается в качестве аргумента.
removeprefix Удаляет префикс из начала строки и возвращает строку без него.
removesuffix Удаляет суффикс из конца строки и возвращает строку без него.
replace Возвращает строку, в которой определенный символ или подстрока заменены чем-то другим (другим символом или подстрокой).
rfind Ищет в строке определенный символ или подстроку. Возвращает последний индекс, по которому он был найден.
rindex Ищет в строке определенный символ или подстроку. Возвращает последний индекс, по которому он был найден (отличие данного метода от предыдущего только в том, что в случае неудачного поиска он возвращает ошибку).
rjust Возвращает выровненную по правому краю версию строки.
rpartition Разбивает строку на три части. Искомая центральная часть указывается в качестве аргумента.
rsplit Разбивает строку по указанному разделителю и возвращает результат в виде списка.
rstrip Удаляет пробелы справа от строки.
split Разбивает строку по указанному разделителю и возвращает ее в виде списка элементов данной строки.
splitlines Разбивает строку по разрывам (символам переноса строк) и возвращает список строк.
startswith Проверяет, начинается ли строка с указанного символа или подстроки.
strip Возвращает строку с удаленными пробелами с двух сторон.
swapcase Все символы в верхнем регистре переводятся в нижний и наоборот.
title Преобразует каждое слово строки так, чтобы оно начиналось с заглавной буквы.
translate Возвращает переведенную строку.
upper Переводит все символы строки в верхний регистр.
zfill Заполняет строку символами 0.

Все строковые методы Python с примерами

В данном разделе дается более подробное описание каждого метода.

Помимо теории, для всех методов представлены полезные примеры.

Итак, начнем по порядку!

capitalize

Чтобы сделать первую букву строки заглавной, удобно использовать данный метод.

"hello, world".capitalize() 

# Результат:
# Hello, world

casefold

Чтобы преобразовать все символы строки в нижний регистр, удобно использовать встроенный метод casefold().

"HELLO, WORLD".casefold() 

# Результат:
# hello world

Этот метод создает новую строку, переводя каждый символ строки в нижний регистр.

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

Например, давайте преобразуем предложение на немецком языке, чтобы избавиться от большого двойного знака (ß). Это невозможно при использовании метода lower():

"Eine Großes bier".lower()    # eine großes bier"
"Eine Großes bier".casefold() # eine grosses bier"

center

Метод center() используется, чтобы окружить (заполнить с двух сторон) строку заданными символами.

Этот метод имеет следующий синтаксис:

string.center(num_characters, separator)

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

Например, давайте добавим символы тире вокруг слова и сделаем всю строку длиной 20 символов:

txt = "banana"
x = txt.center(20, "-")
print(x)

# Результат:
# -------banana-------

count

Метод count() подсчитывает, сколько раз символ или подстрока встречается в строке.

Например, посчитаем количество букв l в предложении:

"Hello, world".count("l") 

# Возвращает 3

Или давайте посчитаем, сколько раз слово «Hello» встречается в этом же предложении:

"Hello, world".count("Hello") 

# Возвращает 1

encode

Чтобы изменить кодировку строки, используйте встроенный метод encode().

Этот метод имеет следующий синтаксис:

string.encode(encoding=encoding, errors=errors)

Кодировкой по умолчанию является UTF-8. В случае неудачи кидается ошибка.

Например, давайте преобразуем строку в кодировку UTF-8:

title = 'Hello world'
print(title.encode())

# Результат:
# b'Hello world'

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

  • encoding: указывает тип кодировки;
  • errors: определяет ответ при ошибке кодирования;

Существует 6 типов ошибок:

  • strict
  • ignore
  • replace
  • xmlcharrefreplace
  • backslashreplace

Вот несколько примеров ASCII-кодировки с разными типами ошибок:

txt = "My name is Kimi Räikkönen"

print(txt.encode(encoding="ascii", errors="ignore"))
print(txt.encode(encoding="ascii", errors="replace"))
print(txt.encode(encoding="ascii", errors="xmlcharrefreplace"))
print(txt.encode(encoding="ascii", errors="backslashreplace"))
print(txt.encode(encoding="ascii", errors="namereplace"))

Результат:

b'My name is Kimi Rikknen'
b'My name is Kimi R?ikk?nen'
b'My name is Kimi Räikkönen'
b'My name is Kimi R\xe4ikk\xf6nen'
b'My name is Kimi R\N{LATIN SMALL LETTER A WITH DIAERESIS}ikk\N{LATIN SMALL LETTER O WITH DIAERESIS}nen'

endswith

Данный метод применяется для проверки, заканчивается ли строка или ее часть заданным символом или подстрокой.

Например:

sentence = "Hello, welcome to my world."
print(sentence.endswith("."))

# Результат:
# True

expandtabs

При помощи метода expandtabs() можно указать размер табуляции. Этот метод полезен, если ваши строки содержат табы.

Например:

sentence = "Htetltlto"

print(sentence.expandtabs(1))
print(sentence.expandtabs(2))
print(sentence.expandtabs(3))
print(sentence.expandtabs(4))
print(sentence.expandtabs(5))

Результат:

H e l l o
H e l l o
H  e  l  l  o
H   e   l   l   o
H    e    l    l    o

find

Метод find() находит индекс первого вхождения символа или подстроки в строку. Если совпадения нет, возвращается -1.

Также можно указать диапазон, в котором выполняется поиск. Полный синтаксис для использования этого метода имеет следующий вид:

string.find(value, start, end)

Например:

sentence = "Hello world"
x = sentence.find("world")
print(x)

# Результат:
# 6

Это означает, что строку world можно найти по индексу 6 в заданном предложении.

В качестве другого примера давайте найдем подстроку в заданном диапазоне:

sentence = "This is a test"

x = sentence.find("is", 3, 8)
print(x)

# Результат:
# 5

format

Метод format() форматирует строку, встраивая в нее значения. Это несколько устаревший подход к форматированию строк в Python.

Метод format() имеет следующий синтаксис:

string.format(value1, value2, ... , valuen)

Здесь value — это переменные, которые вставляются в строку. В дополнение к этому вам необходимо указать (при помощи фигурных скобок) места для этих переменных в строке.

Давайте посмотрим на следующий пример:

name = "John"
age = 21

sentence = "My name is {} and I am {} years old".format(name, age)

print(sentence)

# Результат:
# My name is John and I am 21 years old

format_map

Метод format_map() используется, чтобы напрямую преобразовать словарь в строку.

Вот его синтаксис:

string.format_map(dict)

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

Например:

data = {"name": "John", "age": 21}

sentence = "My name is {name} and I am {age} years old".format_map(data)

print(sentence)

# Результат:
# My name is John and I am 21 years old

index

Метод index() находит индекс первого вхождения символа или подстроки в строку. Если он не находит значение, то вызывается исключение. Этим он отличается от метода find().

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

Синтаксис данного метода имеет следующий вид:

string.index(value, start, end)

Например:

sentence = "Hello world"
x = sentence.index("world")

print(x)

# Результат:
# 6

Это говорит о том, что подстроку world можно найти по индексу 6 в данной строке.

В качестве другого примера давайте найдем подстроку в заданном диапазоне:

sentence = "This is a test"
x = sentence.index("is", 3, 8)

print(x)

# Результат:
# 5

Разница между методами index() и find() заключается в том, что index() выдает ошибку, если не находит значения. Метод find() возвращает -1.

isalnum

Чтобы проверить, являются ли все символы строки буквенно-цифровыми, используется метод isalnum().

Например:

sentence = "This is 50"

print(sentence.isalnum())

# Результат:
# False

isalpha

Чтобы проверить, все ли символы строки являются буквами, используется метод isalpha().

Например:

sentence = "Hello"
print(sentence.isalpha())

# Результат:
# True

isascii

Чтобы проверить, все ли символы строки являются ASCII символами, используется метод isascii().

Например:

sentence = "Hello"
print(sentence.isalpha())

# Результат:
# True

isdecimal

Чтобы проверить, являются ли все символы строки числами в десятичной системе исчисления, используется метод isdecimal().

Например:

sentence = "u0034"
print(sentence.isdecimal())

# Результат:
# True

isdigit

Чтобы проверить, все ли символы строки являются числами, используется метод isdigit().

Например:

sentence = "34"
print(sentence.isdigit())

# Результат:
# True

isidentifier

Чтобы проверить, все ли символы строки являются идентификаторами, используется метод isidentifier().

  • Строка считается идентификатором, если она содержит буквенно-цифровые буквы (a-z, 0-9) или знаки подчеркивания.
  • Идентификатор не может начинаться с цифры.

Например:

sentence = "Hello"
print(sentence.isidentifier())

# Результат:
# True

islower

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

Например:

"Hello, world".islower() 

# Результат:
# False

Этот метод проверяет, все ли символы строки находятся в нижнем регистре. Если это так, он возвращает True. В противном случае False.

isnumeric

Чтобы проверить, все ли символы строки являются числами, используется метод isnumeric().

Например:

sentence = "5000"
print(sentence.isnumeric())

# Результат:
# True

isprintable

Чтобы проверить, все ли символы строки доступны для печати, используется метод isprintable().

Например:

sentence = "This a is test"
print(sentence.isprintable())

# Результат:
# True

isspace

Чтобы проверить, являются ли все символы строки пробелами, используется метод isspace().

Например:

sentence = "             "
print(sentence.isspace())

# Результат:
# True

istitle

Чтобы проверить, все ли первые символы каждого слова в строке начинаются с заглавной буквы, используется метод istitle().

Например:

sentence = "Hello There This Is A Test"
print(sentence.istitle())

# Результат:
# True

isupper

Чтобы проверить, находятся ли все символы строки в верхнем регистре, используется встроенный метод isupper():

Например:

"HELLO, WORLD".isupper() 

# Результат:
# True

Этот метод проверяет, все ли символы строки в верхнем регистре. Если это так, он возвращает True. В противном случае False.

join

Чтобы объединить группу элементов (например, списка) в одну строку, используется метод join().

Например:

words = ["This", "is", "a", "test"]
sentence = " ".join(words)

print(sentence)

# Результат:
# This is a test

ljust

Чтобы добавить определенные символы, например пробелы, справа от строки, используется метод ljust().

Вот его синтаксис:

string.ljust(num_characters, separator)

  • num_characters: общая длина строки вместе с добавленными символами
  • separator: символ, который добавляется в строку n раз, чтобы длина строки достигла заданного в предыдущем параметре значения

Например, добавим справа от строки символ тире:

print("Hello".ljust(20, "-"))

# Результат:
# Hello---------------

lower

Чтобы привести строку Python к нижнему регистру, используется встроенный метод lower().

Например:

"HELLO, WORLD".lower() 

# Результат:
# hello world

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

lstrip

Чтобы удалить начальные символы из строки, используется метод lstrip().

По умолчанию этот метод удаляет все пробелы в начале строки.

Например:

print("    test".lstrip())

# Результат:
# test

В качестве другого примера давайте удалим все дефисы в начале следующей строки:

print("---test---".lstrip("-"))

# Результат:
# test---

maketrans

Чтобы создать таблицу сопоставления строк, используется метод maketrans(). Эта таблица применяется вместе с методом translate().

Синтаксис имеет следующий вид:

string.maketrans(a, b, c)

  • Первый параметр a является обязательным. Если указан только он один, то он должен быть словарем, который определяет порядок замены строк. В противном случае параметр a должен быть строкой, которая показывает, какие символы нужно будет менять.
  • Второй параметр b является необязательным. Он должен быть одинаковой длины с параметром a. Каждый символ в a будет заменен соответствующим символом в b.
  • Третий параметр c также является необязательным. Он определяет, какие символы нужно будет удалить из исходной строки.

Например, заменим в предложении символы о на х:

sentence = "Hello World"
trans_table = sentence.maketrans("o", "x")

print(sentence.translate(trans_table))

# Результат:
# Hellx Wxrld

partition

Чтобы разделить строку на три части, используется метод partition(). Он разбивает строку вокруг определенного символа или подстроки. Результат возвращается в виде кортежа.

Например, можно с его помощью разделить предложение вокруг заданного слова:

sentence = "This is a test"
parts = sentence.partition("a")

print(parts)

# Результат:
# ('This is', 'a', 'test')

removeprefix

Для удаления начала строки используется метод removeprefix(). Надо заметить, что это относительно новый метод, он работает только начиная с версии Python 3.9 и выше.

Например, давайте удалим слово This из данного предложения:

sentence = "This is a test"

print(sentence.removeprefix("This"))

# Результат:
# is a test

removesuffix

Для удаления конца строки используется метод removesuffix(). Это также новый метод, он работает только с версией Python 3.9 и выше.

Например, давайте удалим из данного предложения последнее слово test:

sentence = "This is a test"

print(sentence.removesuffix("test"))

# Результат:
# This is a

replace

Чтобы заменить символ или подстроку внутри строки на что-то другое, используется метод replace():

Он имеет следующий синтаксис:

string.replace(old, new, count)

Здесь:

  • old: символ или подстрока, которую вы хотите заменить
  • new: то, на что вы хотите это поменять
  • count: необязательный параметр (по умолчанию равен 1), определяет количество замен, которое необходимо произвести

Например:

sentence = "This is a test"
updated_sentence = sentence.replace("This", "It")

print(updated_sentence)

# Результат:
# It is a test

rfind

Для нахождения индекса последнего вхождения символа или подстроки в строку используется метод rfind(). При отсутствии совпадений возвращается значение -1.

Синтаксис:

string.rfind(val, start, end)

Здесь:

  • val: значение искомого символа или подстроки
  • start: необязательный параметр, определяет индекс строки, с которого начинается поиск
  • end: также необязательный параметр, определяет индекс строки, где поиск будет прекращен

Например:

sentence = "This car is my car"
last_index = sentence.rfind("car")

print(last_index) 

# Результат:
# 15

rindex

Для нахождения индекса последнего вхождения символа или подстроки в строку также можно использовать метод rindex(). Но если вхождений найдено не будет, данный метод вызовет исключение. В этом его отличие от метода rfind(), который возвращает -1.

Его синтаксис имеет вид:

string.rindex(val, start, end)

Здесь:

  • val: значение искомого символа или подстроки
  • start: необязательный параметр, определяет индекс строки, с которого начинается поиск
  • end: также необязательный параметр, определяет индекс строки, где поиск будет прекращен
sentence = "This car is my car"
last_index = sentence.rindex("car")

print(last_index) 

# Результат:
# 15

rjust

Метод rjust() используется для добавления слева от строки определенных символов, например пробелов.

У него следующий синтаксис:

string.rjust(num_characters, separator)

  • num_characters: общая длина строки вместе с добавленными символами
  • separator: символ, который следует добавлять слева от строки до достижения нужной длины

Например, добавим символы тире в начало строки:

print("Hello".rjust(20, "-"))

# Результат:
# ---------------Hello

rpartition

Данный метод разделяет строку на три части относительно последнего вхождения искомого символа или подстроки. Результат возвращается в виде кортежа.

Например:

sentence = "This car is my car, you cannot drive it"

parts = sentence.rpartition("car")
print(parts)

# Результат:
# ('This car is my ', 'car', ', you cannot drive it')

rsplit

Для разбиения строки по определенному разделителю начиная с правой стороны используется метод rsplit(). Результат возвращается в виде списка.

Его синтаксис имеет вид:

string.rsplit(separator, max)

Здесь:

  • separator: разделитель (символ или подстрока), на основе которого разбивается строка
  • max: определяет максимальное количество разбиений, это необязательный параметр, если его не задавать, то данный метод работает точно так же, как split()

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

items = "apple, banana, cherry"
split_items = items.rsplit(",", 1)

print(split_items)

# Результат:
# ['apple, banana', ' cherry']

Обратите внимание, что данный массив состоит только из двух строк.

rstrip

При помощи метода rstrip() можно удалять определенные символы, начиная с конца строки.

Если не указывать аргументов, данный метод будет пытаться удалять пробелы справа от строки.

Например, давайте удалим символ тире из строки:

print("Hello-----".rstrip("-"))

# Результат:
# Hello

split

При помощи метода split() строку можно превратить в список строк, разбив ее на части. Это один из наиболее широко используемых строковых методов Python.

По умолчанию данный метод разбивает строку на основе пробелов.

Вот его синтаксис:

string.split(separator, max)

Здесь:

  • separator: необязательный параметр, символ или подстрока, на основании которой будет осуществляться разбиение
  • max: также необязательный параметр, определяет количество предполагаемых разбиений

Например:

sentence = "This is a test"

# Разбить по пробелам 
parts = sentence.split()

print(parts)

# Результат:
# ['This', 'is', 'a', 'test']

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

sentence = "Apple, Banana, Orange, Mango, Pineapple"

parts = sentence.split(",", 2)

print(parts)

# Результат:
# ['Apple', ' Banana', ' Orange, Mango, Pineapple']

Обратите внимание, что в данном списке только 3 элемента.

splitlines

Чтобы разбить текст, считанный в виде строки, по символам разрыва строки, используется метод splitlines().

Например:

sentence = "ApplenBanananOrangenMangonPineapple"

parts = sentence.splitlines()

print(parts)

# Результат:
# ['Apple', 'Banana', 'Orange', 'Mango', 'Pineapple']

Вы также можете оставить символы разрыва строк в конце каждой строки. Для этого нужно передать параметр True в качестве аргумента данного метода:

sentence = "ApplenBanananOrangenMangonPineapple"

parts = sentence.splitlines(True)

print(parts)

# Результат:
# ['Applen', 'Bananan', 'Orangen', 'Mangon', 'Pineapple']

startswith

Чтобы проверить, начинается ли строка с определенного значения, используется метод startwith().

Вот его синтаксис:

string.startswith(val, start, end)

Здесь:

  • val: значение, наличие которого хочется проверить
  • start: необязательный параметр, целое число, определяющее индекс, с которого следует начать поиск
  • end: также необязательный параметр, целое число, указывающее на индекс, на котором надо завершить поиск

Например:

sentence = "Hello world"

print(sentence.startswith("Hello")) 

# Результат:
# True

Теперь перейдем к другому примеру. На этот раз давайте посмотрим, есть ли в строке, начиная с 6-го индекса, подстрока wor:

sentence = "Hello world"

print(sentence.startswith("wor", 6)) 

# Результат:
# True

strip

Чтобы удалить определенные символы или подстроку из строки, используется метод strip(). По умолчанию этот метод удаляет пробелы. Также можно указать аргумент, который будет определять, какие именно символы нужно удалить.

Например, давайте удалим все символы тире из строки:

word = "--------test---"

stripped_word = word.strip("-")

print(stripped_word)

# Результат:
# test

swapcase

Чтобы сделать строчные буквы заглавными, а заглавные строчными, используется метод swapcase().

Например:

"HELLO, world".swapcase() 

# Результат:
# hello, WORLD

Этот метод создает новую строку, заменяя все заглавные буквы на строчные и наоборот.

title

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

Например:

"hello, world".title() 

# Результат:
# Hello, World

Этот метод создает новую строку, делая первую букву каждого слова заглавной.

translate

Чтобы заменить определенные символы строки на другие символы, используется метод translate().

Но прежде чем это делать, нужно создать таблицу сопоставления при помощи метода maketrans().

Например, давайте заменим буквы о на х:

sentence = "Hello World"

trans_table = sentence.maketrans("o", "x")

print(sentence.translate(trans_table))

# Результат:
# Hellx Wxrld

upper

Чтобы преобразовать строку Python в верхний регистр, используется встроенный метод upper().

Например:

"Hello, world".upper() 

# Результат:
# HELLO WORLD

Этот метод создает новую строку, переводя каждый символ исходной строки в верхний регистр.

zfill

Данный метод добавляет нули перед исходной строкой.

В качестве аргумента нужно передать желаемую длину строки и, метод добавит нужное количество нулей перед строкой.

Например:

word = "Test"

filled_word = word.zfill(10)

print(filled_word)

# Результат:
# 000000Test

Обратите внимание, что общая длина этой строки теперь равна 10.

Заключение

Видите как много существует методов строк!

Надеюсь, вам понравилась эта статья!

Удачного кодинга!

Перевод статьи Arturri Jalli «Python Strings: A Complete Guide [2022]».

Содержание:развернуть

  • Вводная информация о строках
  • Что представляют собой строки в Python

  • Литералы строк

  • Кодировка строк

  • Максимальная длина строки в Python

  • Перенос строк

  • Конкатенация строк

  • Сравнение строк

  • Пустая строка Python

  • Как удалить строку в Python

  • Обращение по индексу

  • Форматирование строк
  • Оператор %

  • str.format()

  • f-строки (Python 3.6+)

  • Стандартная библиотека Template Strings

  • Функции для работы со строками
  • Методы для работы со строками
  • Преобразование из строки в другой тип
  • string → int

  • string → list

  • string → bytes

  • string → datetime

  • string → float

  • string → dict

  • string → json

  • Best practices
  • Как разбить строку на символы

  • Как из строки выделить числа

  • Как перевернуть строку

  • Как удалить последний символ в строке

  • Как убрать пробелы из строки

Строки в языке программирования Python — это объекты, которые состоят из последовательности символов.

Наравне с bool, int и другими типами данных, работа со строковым типом является неотъемлемой частью программирования, так как очень редко встречаются приложения, в которых не используется текст.

Вводная информация о строках

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

Что представляют собой строки в Python

С точки зрения Питона, строка — это упорядоченная последовательность символов, которая предназначена для хранения информации в виде простого текста.

Поэтому тип данных string используется в случае, когда что-то нужно представить в текстовой форме.

Литералы строк

Литерал — способ создания объектов, в случае строк Питон предлагает несколько основных вариантов:

>>> 'string' # одинарные кавычки
'string'

>>> "string" # двойные кавычки
'string'

>>> """string"""
'string'

>>> '''string'''
'string'

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

>>> 'book "war and peace"' # разный тип кавычек
'book "war and peace"'

>>> "book 'war and peace'" # разный тип кавычек
"book 'war and peace'"

>>> "book "war and peace"" # экранирование кавычек одного типа
'book "war and peace"'

>>> 'book 'war and peace'' # экранирование кавычек одного типа
"book 'war and peace'"

💡 Разницы между строками с одинарными и двойными кавычками нет — это одно и то же

Какие кавычки использовать — решать вам, соглашение PEP 8 не дает рекомендаций по использованию кавычек. Просто выберите один тип кавычек и придерживайтесь его. Однако если в стоке используются те же кавычки, что и в литерале строки, используйте разные типы кавычек — обратная косая черта в строке ухудшает читаемость кода.

Кодировка строк

В третьей версии языка программирования Python все строки представляют собой последовательность Unicode-символов.

В Python 3 кодировка по умолчанию исходного кода — UTF-8. Во второй версии по умолчанию использовалась ASCII. Если необходимо использовать другую кодировку, можно разместить специальное объявление на первой строке файла, к примеру:

# -*- coding: windows-1252 -*-

Максимальная длина строки в Python

Максимальная длина строки зависит от платформы. Обычно это:

  • 2**31 — 1 — для 32-битной платформы;
  • 2**63 — 1 — для 64-битной платформы;

Константа maxsize, определенная в модуле sys :

>>> import sys
>>> sys.maxsize
2147483647

Перенос строк

Перенос строки осуществляется с помощью символа n :

>>> text = "onentwonthree"
>>> print(text)
one
two
three

Конкатенация строк

Одна из самых распространенных операций со строками — их объединение (конкатенация). Для этого используется знак +, в результате к концу первой строки будет дописана вторая:

>>> s1 = "Hello" + " world"
>>> s2 = " world"
>>> s1+s2
'Hello world world'

При необходимости объединения строки с числом его предварительно нужно привести тоже к строке, используя функцию str() :

>>> name = "John"
>>> age = 30
>>> "Name: " + name + ", age: " + str(age)
'Name: John, age: 30'

Сравнение строк

При сравнении нескольких строк рассматриваются отдельные символы и их регистр:

  • цифра условно меньше, чем любая буква из алфавита;
  • алфавитная буква в верхнем регистре меньше, чем буква в нижнем регистре;
  • чем раньше буква в алфавите, тем она меньше;

При этом сравниваются по очереди первые символы, затем — 2-е и так далее.

>>> s1 = "1a"
>>> s2 = "aa"
>>> s3 = "Aa"
>>> s4 = "ba"

>>> "1a" > "aa" # сравнение цифры с буквой
False

>>> "aa" > "Aa" # сравнение регистров
True

>>> "aa" > "ba" # сравнение букв по алфавитному порядку
False

>>> "aa" < "az" # первые буквы одинаковые, сравниваются следующие две
True

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

>>> s1 = "Intel"
>>> s2 = "intel"
>>> s1 == s2
False
>>> s1.lower() == s2.lower()
True

Пустая строка Python

Объявить пустую строку можно следующими способами:

>>> ""
''
>>> ''
''
>>> str()
''

Как удалить строку в Python

Строки, как и некоторые другие типы данных в языке Python, являются неизменяемыми объектами. При задании нового значения строке просто создается новая, с заданным значением. Для удаления строки можно воспользоваться методом replace() , заменив ее на пустую строку:

>>> s = "test"
>>> s.replace("test", "")
''

Или перезаписать переменную пустой строкой:

>>> s = "test"
>>> s = ""
>>> s
''

Обращение по индексу

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

>>> s = "abcdef"
>>> s[0]
'a'
>>> s[2]
'c'

Индекс начинается с 0

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

>>> s = "abcdef"
>>> s[-1]
'f'

Форматирование строк

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

Оператор %

Строки в Python обладают встроенной операцией, к которой можно получить доступ оператором %, что дает возможность очень просто делать форматирование. Самый простой пример — когда для подстановки нужен только один аргумент, значением будет он сам:

>>> name = "Alex"
>>> 'Hello, %s' % name
'Hello, Alex'

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

>>> '%d %s, %d %s' % (6, 'bananas', 10, 'lemons')
'6 bananas, 10 lemons'

Как видно из предыдущего примера, зависимо от типа данных для подстановки и того, что требуется получить в итоге, пишется разный формат. Наиболее часто используются:

  1. %d‘, ‘%i‘, ‘%u — десятичное число;
  2. %c‘ — символ, точнее строка из одного символа или число – код символа;
  3. %r‘ — строка (литерал Python);
  4. %s‘ — строка.

Такой способ форматирования строк называет «старым» стилем, который в Python 3 был заменен на более удобные способы.

str.format()

В Python 3 появился более новый метод форматирования строк, который вскоре перенесли и в Python 2.7. Такой способ избавляет программиста от специального синтаксиса %-оператора. Делается все путем вызова .format() для строковой переменной. С помощью специального символа — фигурных скобок — указывается место для подстановки значения, каждая пара скобок указывает отдельное место для подстановки, значения могут быть разного типа:

>>> print('{}'.format(100))
100
>>> '{0}, {1}, {2}'.format('one', 'two', 'three')
'one, two, three'
>>> '{2}, {1}, {0}'.format('one', 'two', 'three')
'three, two, one'

💭 В Python 3 форматирование строк с использованием «нового стиля» является более предпочтительным по сравнению с использованием %-стиля, так как предоставляет более широкие возможности, не усложняя простые варианты использования.

f-строки (Python 3.6+)

В Python версии 3.6 появился новый метод форматирования строк — «f-строки», с его помощью можно использовать встроенные выражения внутри строк:

>>> name = 'Alex'
>>> f'Hello, {name}!'
'Hello, Alex!'

Такой способ форматирования очень мощный, так как дает возможность встраивать выражения:

>>> a = 5
>>> b = 10
>>> f'Five plus ten is {a + b} and not {2 * (a + b)}.'
'Five plus ten is 15 and not 30.'

Таким образом, форматирование с помощью f-строк напоминает использование метода format(), но более гибкое, быстрое и читабельное.

Стандартная библиотека Template Strings

Еще один способ форматирования строк, который появился еще с выходом Python версии 2.4, но так и не стал популярным — использование библиотеки Template Strings. Есть поддержка передачи значения по имени, используется $-синтаксис как в языке PHP:

>>> from string import Template
>>> name = "Alex"
>>> age = 30
>>> s = Template('My name is $name. I’m $age.')
>>> print(s.substitute(name=name, age=age))
My name is Alex. I'm 30

Функции для работы со строками

Для работы со строками в Питоне предусмотрены специальные функции. Рассмотрим их:

Преобразование числового или другого типа к строке:

  • str(n) — преобразование числового или другого типа к строке;
  • len(s) — длина строки;
  • chr(s) — получение символа по его коду ASCII;
  • ord(s) — получение кода ASCII по символу.

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

Кроме функций, для работы со строками есть немало методов:

  • find(s, start, end) — возвращает индекс первого вхождения подстроки в s или -1 при отсутствии. Поиск идет в границах от start до end;
  • rfind(s, start, end) — аналогично, но возвращает индекс последнего вхождения;
  • replace(s, new) — меняет последовательность символов s на новую подстроку new;
  • split(x) — разбивает строку на подстроки при помощи выбранного разделителя x;
  • join(x) — соединяет строки в одну при помощи выбранного разделителя x;
  • strip(s) — убирает пробелы с обеих сторон;
  • lstrip(s), rstrip(s) — убирает пробелы только слева или справа;
  • lower() — перевод всех символов в нижний регистр;
  • upper() — перевод всех символов в верхний регистр;
  • capitalize() — перевод первой буквы в верхний регистр, остальных — в нижний.

👉 Примеры использования:

>>> text = "Wikipedia is a Python library that makes it easy to access and parse data from Wikipedia"

>>> text.find("Wikipedia")
0

>>> text.rfind("Wikipedia")
79

>>> text.replace("from Wikipedia", "from https://www.wikipedia.org/")
'Wikipedia is a Python library that makes it easy to access and parse data from https://www.wikipedia.org/'

>>> text.split(" ")
['Wikipedia', 'is', 'a', 'Python', 'library', 'that', 'makes', 'it', 'easy', 'to', 'access', 'and', 'parse', 'data', 'from', 'Wikipedia']

split_text = text.split(" ")
>>> "_".join(split_text)
'Wikipedia_is_a_Python_library_that_makes_it_easy_to_access_and_parse_data_from_Wikipedia'

>>> text = " test "
>>> text.strip()
'test'

>>> text.lstrip()
'test '

>>> text.rstrip()
' test'

>>> text = "Python is a product of the Python Software Foundation"
>>> text.lower()
'python is a product of the python software foundation'

>>> text.upper()
'PYTHON IS A PRODUCT OF THE PYTHON SOFTWARE FOUNDATION'

>>> text = "python is a product of the python software foundation"
>>> text.capitalize()
'Python is a product of the python software foundation'

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

В Питоне строки можно преобразовывать в другие типы данных:

string → int

Функция int() преобразовывает целое число в десятичной системе, заданное как строка, в тип int:

>>> int("10")
10

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

>>> int("0x12F", base=16)
303

string → list

Самый простой способ преобразования строки в список строк — метод split():

>>> 'one two three four'.split()
['one', 'two', 'three', 'four']

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

>>> 'one, two, three, four'.split(',')
['one', ' two', ' three', ' four']

string → bytes

Преобразование строкового типа в байтовый выполняется функцией encode() с указанием кодировки:

>>> 'Байты'.encode('utf-8')
b'xd0x91xd0xb0xd0xb9xd1x82xd1x8b'

string → datetime

Строка в дату преобразовывается функцией strptime() из стандартного модуля datetime:

>>> from datetime import datetime
>>> print(datetime.strptime('Jan 1 2020 1:33PM', '%b %d %Y %I:%M%p'))
2020-01-01 13:33:00

string → float

Для преобразования строки в число с плавающей точкой используется стандартная функция float:

>>> float('1.5')
1.5

string → dict

Создание словаря из строки возможно, если внутри нее данные в формате json. Для этого можно воспользоваться модулем json:

>>> import json
>>> print(json.loads('{"Russia": "Moscow", "France": "Paris"}'))
{'Russia': 'Moscow', 'France': 'Paris'}

string → json

Конвертация объектов Python в объект json выполняется функцией dumps():

>>> import json
>>> json.dumps("hello")
'"hello"'

Best practices

Как разбить строку на символы

Разбиение строки на отдельные символы выполняется несколькими способами:

>>> text = "django"

# вариант 1
>>> list(text)
['d', 'j', 'a', 'n', 'g', 'o']

# вариант 2
>>> [c for c in "text"]
['t', 'e', 'x', 't']

# вариант 3
>>> for c in text:
print(c)

d
j
a
n
g
o

Как из строки выделить числа

Для извлечения чисел из строки можно воспользоваться методами строк:

>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]

Данный пример извлекает только целые положительные числа. Более универсальный вариант – регулярные выражения:

>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> import re
>>> re.findall(r'd+', str)
['3110', '23', '444', '4', '11', '2']

Как перевернуть строку

Существует несколько способов перевернуть строку, начиная от классического – запустить цикл в обратной последовательности, выбирая каждый символ с конца и вставляя его в новую строку, и заканчивая срезами – вариант только для Питона.

С помощью среза — самый быстрый способ:

>>> 'test'[::-1]
'tset'

Использование reversed() и str.join() :

>>> ''.join(reversed('test'))
'tset'

Как удалить последний символ в строке

Как и в предыдущем случае – чтобы убрать последний символ наиболее простым и быстрым вариантом будет использование среза:

>>> "Some text1"[:-1]
'Some text'

Как убрать пробелы из строки

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

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

>>> " Some text ".strip()
'Some text'

2 Удалить со строки все пробелы:

>>> " So me t e x t ".replace(' ', '')
'Sometext'


Работа со строками — неотъемлемая часть создания практически любого приложения, где используется текст, и язык программирования Python предоставляет широкие возможности работы с такими данными.

Содержание

  1. Введение в тему
  2. Что делает метод
  3. Синтаксис
  4. Параметры
  5. Возвращаемое значение
  6. Применение replace для замены нескольких значений
  7. С помощью словаря
  8. Вариант со списками
  9. Другие типы python и метод replace

Введение в тему

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

Метод replace Python возвращает копию строки, в которой все вхождения искомой подстроки заменяются другой подстрокой.

Что делает метод

Слово replace переводится как «заменять», что название этого метода является отличным описанием того, что он делает. С помощью метода replace можно заменить часть строки, называемую подстрокой или её всю на другую строку. Метод replace позволяет гибко изменять только необходимые части строки str.

Синтаксис

Метод .replace() имеет следующий синтаксис:


str.replace(old, new[, count])

Параметры

В качестве аргументов в метод передаются:

str — Строка, к которой применяется метод (тип данных string).

old — Подстрока, которую необходимо найти и заменить (тип данных string).

new — Новая подстрока, которой будет заменена старая (тип данных string).

count— Необязательный аргумент. Количество совпадений старой подстроки, которую необходимо заменить (тип данных int). Если этот параметр не указать, то будут заменены все вхождения подстрок на новые.

Вот несколько примеров применения метода:


my_var = "Ivan, Rinat, Olga, Kira"

#Заменяем все подстроки "Olga" в строке
a = my_var.replace("Olga", "Olya")
print(a)

#Заменяем первую подстроку "i" в строке
b = my_var.replace("i", "I", 1)
print(b)

#Заменяем первые две подстроки "a" в строке
c = my_var.replace("a", "A", 2)
print(c)
# Вывод:

Ivan, Rinat, Olya, Kira

Ivan, RInat, Olga, Kira

IvAn, RinAt, Olga, Kira

Возвращаемое значение

Метод возвращает копию строки, в которой старая подстрока заменяется новой подстрокой. Строка, к которой применяется метод остаётся неизменной. Если искомая подстрока не обнаружена, то возвращается копия исходной строки.


my_var = "Ivan, Rinat, Olga, Kira"

#Заменяем все вхождения "Olga" в строке
a = my_var.replace("Roman", "Roma")
print(a)

# Вывод:

Ivan, Rinat, Olga, Kira

Применение replace для замены нескольких значений

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


my_var = ['Ivan', 'Rinat', 'Olga', 'Kira']

# в новый список записываем элементы начального списка, измененные
# с помощью replace
new_list = [_.replace("i", "A", 1) for _ in my_var]
print(new_list)
# Вывод:

['Ivan', 'RAnat', 'Olga', 'KAra']

С помощью словаря

Предыдущий пример позволяет заменить несколько элементов, однако все они имеют одно и то же значение «i». Если необходимо заменить несколько разных значений, например «i» на «I» и «a» на «A», то необходимо реализовать чуть более сложную программу с использованием словарей:


# Функция для замены нескольких значений
def multiple_replace(target_str, replace_values):
# получаем заменяемое: подставляемое из словаря в цикле
for i, j in replace_values.items():
# меняем все target_str на подставляемое
target_str = target_str.replace(i, j)
return target_str

# создаем словарь со значениями и строку, которую будет изменять
replace_values = {"i": "I", "a": "A"}
my_str = "Ivan, Rinat, Olga, Kira"

# изменяем и печатаем строку
my_str = multiple_replace(my_str, replace_values)
print(my_str)
# Вывод:

IvAn, RInAt, OlgA, KIrA

Здесь replace используется в функции, аргументы которой исходная строка и словарь со значениями для замены.

У этого варианта программы есть один существенный недостаток, программист не может быть уверен в том, какой результат он получит. Дело в том, что словари — это последовательности без определенного порядка, поэтому рассматриваемый пример программы может привести к двум разным результатам в зависимости от того, как интерпретатор расположит элементы словаря:

В Python версии 3.6 и более поздних порядок перебора ключей будет такой же, как и при котором они созданы. В более ранних версиях Python порядок может отличаться.

Для решения этой проблемы можно заменить обычный словарь на упорядоченный словарь OrderedDict, который нужно импортировать следующей командой:


from collections import OrderedDict

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


replace_values = {"i": "I", "a": "A"}

Изменить её надо на:


replace_values = OrderedDict([("i", "I"), ("a", "A")])

Вариант со списками

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


my_str = "Ivan, Rinat, Olga, Kira"
# в цикле передаем список (заменяемое, подставляемое) в метод replace
for x, y in ("i", "I"), ("a", "A"):
my_str = my_str.replace(x, y)
print(my_str)
# Вывод:

IvAn, RInAt, OlgA, KIrA

Другие типы python и метод replace

Метод replace есть не только у строк, с его помощью программист может изменять последовательности байт, время и дату.

Синтаксис метода для последовательности байт ничем не отличается от синтаксиса для строк, для дат и времени в аргументах метода replace нужно писать идентификатор изменяемого параметра, например:


from datetime import date

t_date = date(2021, 6, 19)
t_date = t_date.replace(day = 1)
print(t_date)
# Вывод:
2021-06-01

Для времени метод replace применяется аналогично.

Функцию replace() также можно использовать для замены некоторой строки, присутствующей в csv или текстовом файле. Модуль Python Pandas полезен при работе с наборами данных. Функция pandas.str.replace() function используется для замены строки другой строкой в переменной или столбце данных. Синтаксис:


dataframe.str.replace('old string', 'new string')

Иван Душенко

Автор статьи

Задать вопрос

If you’re looking for ways to remove or replace all or part of a string in Python, then this tutorial is for you. You’ll be taking a fictional chat room transcript and sanitizing it using both the .replace() method and the re.sub() function.

In Python, the .replace() method and the re.sub() function are often used to clean up text by removing strings or substrings or replacing them. In this tutorial, you’ll be playing the role of a developer for a company that provides technical support through a one-to-one text chat. You’re tasked with creating a script that’ll sanitize the chat, removing any personal data and replacing any swear words with emoji.

You’re only given one very short chat transcript:

[support_tom] 2022-08-24T10:02:23+00:00 : What can I help you with?
[johndoe] 2022-08-24T10:03:15+00:00 : I CAN'T CONNECT TO MY BLASTED ACCOUNT
[support_tom] 2022-08-24T10:03:30+00:00 : Are you sure it's not your caps lock?
[johndoe] 2022-08-24T10:04:03+00:00 : Blast! You're right!

Even though this transcript is short, it’s typical of the type of chats that agents have all the time. It has user identifiers, ISO time stamps, and messages.

In this case, the client johndoe filed a complaint, and company policy is to sanitize and simplify the transcript, then pass it on for independent evaluation. Sanitizing the message is your job!

The first thing you’ll want to do is to take care of any swear words.

How to Remove or Replace a Python String or Substring

The most basic way to replace a string in Python is to use the .replace() string method:

>>>

>>> "Fake Python".replace("Fake", "Real")
'Real Python'

As you can see, you can chain .replace() onto any string and provide the method with two arguments. The first is the string that you want to replace, and the second is the replacement.

Now it’s time to apply this knowledge to the transcript:

>>>

>>> transcript = """
... [support_tom] 2022-08-24T10:02:23+00:00 : What can I help you with?
... [johndoe] 2022-08-24T10:03:15+00:00 : I CAN'T CONNECT TO MY BLASTED ACCOUNT
... [support_tom] 2022-08-24T10:03:30+00:00 : Are you sure it's not your caps lock?
... [johndoe] 2022-08-24T10:04:03+00:00 : Blast! You're right!"""

>>> transcript.replace("BLASTED", "😤")
[support_tom] 2022-08-24T10:02:23+00:00 : What can I help you with?
[johndoe] 2022-08-24T10:03:15+00:00 : I CAN'T CONNECT TO MY 😤 ACCOUNT
[support_tom] 2022-08-24T10:03:30+00:00 : Are you sure it's not your caps lock?
[johndoe] 2022-08-24T10:04:03+00:00 : Blast! You're right!

Loading the transcript as a triple-quoted string and then using the .replace() method on one of the swear words works fine. But there’s another swear word that’s not getting replaced because in Python, the string needs to match exactly:

>>>

>>> "Fake Python".replace("fake", "Real")
'Fake Python'

As you can see, even if the casing of one letter doesn’t match, it’ll prevent any replacements. This means that if you’re using the .replace() method, you’ll need to call it various times with the variations. In this case, you can just chain on another call to .replace():

>>>

>>> transcript.replace("BLASTED", "😤").replace("Blast", "😤")
[support_tom] 2022-08-24T10:02:23+00:00 : What can I help you with?
[johndoe] 2022-08-24T10:03:15+00:00 : I CAN'T CONNECT TO MY 😤 ACCOUNT
[support_tom] 2022-08-24T10:03:30+00:00 : Are you sure it's not your caps lock?
[johndoe] 2022-08-24T10:04:03+00:00 : 😤! You're right!

Success! But you’re probably thinking that this isn’t the best way to do this for something like a general-purpose transcription sanitizer. You’ll want to move toward some way of having a list of replacements, instead of having to type out .replace() each time.

Set Up Multiple Replacement Rules

There are a few more replacements that you need to make to the transcript to get it into a format acceptable for independent review:

  • Shorten or remove the time stamps
  • Replace the usernames with Agent and Client

Now that you’re starting to have more strings to replace, chaining on .replace() is going to get repetitive. One idea could be to keep a list of tuples, with two items in each tuple. The two items would correspond to the arguments that you need to pass into the .replace() method—the string to replace and the replacement string:

# transcript_multiple_replace.py

REPLACEMENTS = [
    ("BLASTED", "😤"),
    ("Blast", "😤"),
    ("2022-08-24T", ""),
    ("+00:00", ""),
    ("[support_tom]", "Agent "),
    ("[johndoe]", "Client"),
]

transcript = """
[support_tom] 2022-08-24T10:02:23+00:00 : What can I help you with?
[johndoe] 2022-08-24T10:03:15+00:00 : I CAN'T CONNECT TO MY BLASTED ACCOUNT
[support_tom] 2022-08-24T10:03:30+00:00 : Are you sure it's not your caps lock?
[johndoe] 2022-08-24T10:04:03+00:00 : Blast! You're right!
"""

for old, new in REPLACEMENTS:
    transcript = transcript.replace(old, new)

print(transcript)

In this version of your transcript-cleaning script, you created a list of replacement tuples, which gives you a quick way to add replacements. You could even create this list of tuples from an external CSV file if you had loads of replacements.

You then iterate over the list of replacement tuples. In each iteration, you call .replace() on the string, populating the arguments with the old and new variables that have been unpacked from each replacement tuple.

With this, you’ve made a big improvement in the overall readability of the transcript. It’s also easier to add replacements if you need to. Running this script reveals a much cleaner transcript:

$ python transcript_multiple_replace.py
Agent  10:02:23 : What can I help you with?
Client 10:03:15 : I CAN'T CONNECT TO MY 😤 ACCOUNT
Agent  10:03:30 : Are you sure it's not your caps lock?
Client 10:04:03 : 😤! You're right!

That’s a pretty clean transcript. Maybe that’s all you need. But if your inner automator isn’t happy, maybe it’s because there are still some things that may be bugging you:

  • Replacing the swear words won’t work if there’s another variation using -ing or a different capitalization, like BLAst.
  • Removing the date from the time stamp currently only works for August 24, 2022.
  • Removing the full time stamp would involve setting up replacement pairs for every possible time—not something you’re too keen on doing.
  • Adding the space after Agent in order to line up your columns works but isn’t very general.

If these are your concerns, then you may want to turn your attention to regular expressions.

Leverage re.sub() to Make Complex Rules

Whenever you’re looking to do any replacing that’s slightly more complex or needs some wildcards, you’ll usually want to turn your attention toward regular expressions, also known as regex.

Regex is a sort of mini-language made up of characters that define a pattern. These patterns, or regexes, are typically used to search for strings in find and find and replace operations. Many programming languages support regex, and it’s widely used. Regex will even give you superpowers.

In Python, leveraging regex means using the re module’s sub() function and building your own regex patterns:

# transcript_regex.py

import re

REGEX_REPLACEMENTS = [
    (r"blastw*", "😤"),
    (r" [-T:+d]{25}", ""),
    (r"[supportw*]", "Agent "),
    (r"[johndoe]", "Client"),
]

transcript = """
[support_tom] 2022-08-24T10:02:23+00:00 : What can I help you with?
[johndoe] 2022-08-24T10:03:15+00:00 : I CAN'T CONNECT TO MY BLASTED ACCOUNT
[support_tom] 2022-08-24T10:03:30+00:00 : Are you sure it's not your caps lock?
[johndoe] 2022-08-24T10:04:03+00:00 : Blast! You're right!
"""

for old, new in REGEX_REPLACEMENTS:
    transcript = re.sub(old, new, transcript, flags=re.IGNORECASE)

print(transcript)

While you can mix and match the sub() function with the .replace() method, this example only uses sub(), so you can see how it’s used. You’ll note that you can replace all variations of the swear word by using just one replacement tuple now. Similarly, you’re only using one regex for the full time stamp:

$ python transcript_regex.py
Agent  : What can I help you with?
Client : I CAN'T CONNECT TO MY 😤 ACCOUNT
Agent  : Are you sure it's not your caps lock?
Client : 😤! You're right!

Now your transcript has been completely sanitized, with all noise removed! How did that happen? That’s the magic of regex.

The first regex pattern, "blastw*", makes use of the w special character, which will match alphanumeric characters and underscores. Adding the * quantifier directly after it will match zero or more characters of w.

Another vital part of the first pattern is that the re.IGNORECASE flag makes it a case-insensitive pattern. So now, any substring containing blast, regardless of capitalization, will be matched and replaced.

The second regex pattern uses character sets and quantifiers to replace the time stamp. You often use character sets and quantifiers together. A regex pattern of [abc], for example, will match one character of a, b, or c. Putting a * directly after it would match zero or more characters of a, b, or c.

There are more quantifiers, though. If you used [abc]{10}, it would match exactly ten characters of a, b or c in any order and any combination. Also note that repeating characters is redundant, so [aa] is equivalent to [a].

For the time stamp, you use an extended character set of [-T:+d] to match all the possible characters that you might find in the time stamp. Paired with the quantifier {25}, this will match any possible time stamp, at least until the year 10,000.

The time stamp regex pattern allows you to select any possible date in the time stamp format. Seeing as the the times aren’t important for the independent reviewer of these transcripts, you replace them with an empty string. It’s possible to write a more advanced regex that preserves the time information while removing the date.

The third regex pattern is used to select any user string that starts with the keyword "support". Note that you escape () the square bracket ([) because otherwise the keyword would be interpreted as a character set.

Finally, the last regex pattern selects the client username string and replaces it with "Client".

With regex, you can drastically cut down the number of replacements that you have to write out. That said, you still may have to come up with many patterns. Seeing as regex isn’t the most readable of languages, having lots of patterns can quickly become hard to maintain.

Thankfully, there’s a neat trick with re.sub() that allows you to have a bit more control over how replacement works, and it offers a much more maintainable architecture.

Use a Callback With re.sub() for Even More Control

One trick that Python and sub() have up their sleeves is that you can pass in a callback function instead of the replacement string. This gives you total control over how to match and replace.

To get started building this version of the transcript-sanitizing script, you’ll use a basic regex pattern to see how using a callback with sub() works:

# transcript_regex_callback.py

import re

transcript = """
[support_tom] 2022-08-24T10:02:23+00:00 : What can I help you with?
[johndoe] 2022-08-24T10:03:15+00:00 : I CAN'T CONNECT TO MY BLASTED ACCOUNT
[support_tom] 2022-08-24T10:03:30+00:00 : Are you sure it's not your caps lock?
[johndoe] 2022-08-24T10:04:03+00:00 : Blast! You're right!
"""

def sanitize_message(match):
    print(match)

re.sub(r"[-T:+d]{25}", sanitize_message, transcript)

The regex pattern that you’re using will match the time stamps, and instead of providing a replacement string, you’re passing in a reference to the sanitize_message() function. Now, when sub() finds a match, it’ll call sanitize_message() with a match object as an argument.

Since sanitize_message() just prints the object that it’s received as an argument, when running this, you’ll see the match objects being printed to the console:

$ python transcript_regex_callback.py
<re.Match object; span=(15, 40), match='2022-08-24T10:02:23+00:00'>
<re.Match object; span=(79, 104), match='2022-08-24T10:03:15+00:00'>
<re.Match object; span=(159, 184), match='2022-08-24T10:03:30+00:00'>
<re.Match object; span=(235, 260), match='2022-08-24T10:04:03+00:00'>

A match object is one of the building blocks of the re module. The more basic re.match() function returns a match object. sub() doesn’t return any match objects but uses them behind the scenes.

Because you get this match object in the callback, you can use any of the information contained within it to build the replacement string. Once it’s built, you return the new string, and sub() will replace the match with the returned string.

Apply the Callback to the Script

In your transcript-sanitizing script, you’ll make use of the .groups() method of the match object to return the contents of the two capture groups, and then you can sanitize each part in its own function or discard it:

# transcript_regex_callback.py

import re

ENTRY_PATTERN = (
    r"[(.+)] "  # User string, discarding square brackets
    r"[-T:+d]{25} "  # Time stamp
    r": "  # Separator
    r"(.+)"  # Message
)
BAD_WORDS = ["blast", "dash", "beezlebub"]
CLIENTS = ["johndoe", "janedoe"]

def censor_bad_words(message):
    for word in BAD_WORDS:
        message = re.sub(rf"{word}w*", "😤", message, flags=re.IGNORECASE)
    return message

def censor_users(user):
    if user.startswith("support"):
        return "Agent"
    elif user in CLIENTS:
        return "Client"
    else:
        raise ValueError(f"unknown client: '{user}'")

def sanitize_message(match):
    user, message = match.groups()
    return f"{censor_users(user):<6} : {censor_bad_words(message)}"

transcript = """
[support_tom] 2022-08-24T10:02:23+00:00 : What can I help you with?
[johndoe] 2022-08-24T10:03:15+00:00 : I CAN'T CONNECT TO MY BLASTED ACCOUNT
[support_tom] 2022-08-24T10:03:30+00:00 : Are you sure it's not your caps lock?
[johndoe] 2022-08-24T10:04:03+00:00 : Blast! You're right!
"""

print(re.sub(ENTRY_PATTERN, sanitize_message, transcript))

Instead of having lots of different regexes, you can have one top level regex that can match the whole line, dividing it up into capture groups with brackets (()). The capture groups have no effect on the actual matching process, but they do affect the match object that results from the match:

  • [(.+)] matches any sequence of characters wrapped in square brackets. The capture group picks out the username string, for instance johndoe.
  • [-T:+d]{25} matches the time stamp, which you explored in the last section. Since you won’t be using the time stamp in the final transcript, it’s not captured with brackets.
  • : matches a literal colon. The colon is used as a separator between the message metadata and the message itself.
  • (.+) matches any sequence of characters until the end of the line, which will be the message.

The content of the capturing groups will be available as separate items in the match object by calling the .groups() method, which returns a tuple of the matched strings.

The two groups are the user string and the message. The .groups() method returns them as a tuple of strings. In the sanitize_message() function, you first use unpacking to assign the two strings to variables:

def sanitize_message(match):
    user, message = match.groups()
    return f"{censor_users(user):<6} : {censor_bad_words(message)}"

Note how this architecture allows a very broad and inclusive regex at the top level, and then lets you supplement it with more precise regexes within the replacement callback.

The sanitize_message() function makes use of two functions to clean up usernames and bad words. It additionally uses f-strings to justify the messages. Note how censor_bad_words() uses a dynamically created regex while censor_users() relies on more basic string processing.

This is now looking like a good first prototype for a transcript-sanitizing script! The output is squeaky clean:

$ python transcript_regex_callback.py
Agent  : What can I help you with?
Client : I CAN'T CONNECT TO MY 😤 ACCOUNT
Agent  : Are you sure it's not your caps lock?
Client : 😤! You're right!

Nice! Using sub() with a callback gives you far more flexibility to mix and match different methods and build regexes dynamically. This structure also gives you the most room to grow when your bosses or clients inevitably change their requirements on you!

Conclusion

In this tutorial, you’ve learned how to replace strings in Python. Along the way, you’ve gone from using the basic Python .replace() string method to using callbacks with re.sub() for absolute control. You’ve also explored some regex patterns and deconstructed them into a better architecture to manage a replacement script.

With all that knowledge, you’ve successfully cleaned a chat transcript, which is now ready for independent review. Not only that, but your transcript-sanitizing script has plenty of room to grow.

Строки Python: замена, объединение, разделение, реверс, заглавные и строчные

От автора: в Python все является объектом, и строка тоже. Строка Python может быть создана просто с помощью заключения символов в двойные кавычки.

Например:

В этом руководстве мы узнаем:

Хотите узнать, что необходимо для создания сайта?

Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

Смотреть видео

Как получать доступ к значениям в строках

О различных строковых операторах

Еще несколько примеров

О методе Python String replace()

Как приводить строки к верхнему и нижнему регистру

Об использование для строки функцию «join»

О реверсе строк

О разделении строк

Доступ к значениям в строках

Python не поддерживает тип символов, они обрабатываются как одна строка, а также рассматриваются как подстроки. Мы используем для разбивки квадратные скобки вместе с индексом или индексами, чтобы получить подстроки.

var1 = «Guru99!»

var2 = «Software Testing»

print («var1[0]:»,var1[0])

print («var2[1:5]:»,var2[1:5])

Различные строковые операторы

Существуют различные строковые операторы, которые можно использовать по-разному, например, объединять строки. Предположим, что если a=guru, а b=99, то a+b= «guru99». Точно так же, если вы используете *2, это будет «GuruGuru». Также вы можете использовать другие операторы.

Оператор []. Описание: Фрагмент — дает символ с данным индексом. Пример: a[1] дает «u» из слова Guru, так как (0=G, 1=u, 2=r и 3=u).

Оператор [:]. Описание: Диапазон фрагментов — дает символы из заданного диапазона. Пример: x[1:3] даем «ur» из слова гуру Guru. Помните, что это не учитывать 0, который является G, это будет учитывать буквы после него.

Оператор in. Описание: Содержит — возвращает true, если в заданной строке есть буква. Пример: u присутствует в слове Guru и, следовательно, это даст 1 (true).

Оператор not in. Описание: Не содержит -возвращает true, если буква не существует в данной строке. Пример: l не присутствует в слове Guru и, следовательно, это даст 1.

x=«Guru»

print «l» not in x

Оператор r/R. Описание: Необработанная строка подавляет фактическое значение escape-символов. Пример: Напечатайте r’n’ печатает n и напечатайте R’n’ печатает n.

Оператор % — используется для формата строк. Описание: %r — вставляет каноническое строковое представление объекта (т. е. repr(o)), %s — вставляет строковое представление объекта (т. е. str(o)), %d — форматирует число для отображения. Пример: Вывод этого кода будет «guru 99».

name = ‘guru’

number = 99

print‘%s %d’ % (name,number)

Оператор +. Описание: Объединение 2 строк. Пример: Объединяет строки и дает результат.

x=«Guru»

y=«99»

print x+y

Оператор *. Описание: Повторение. Пример: Выводит символ дважды.

x=«Guru»

y=«99»

print x*2

Еще несколько примеров

Вы можете обновить строку Python, переназначив переменную другой строке. Новое значение может быть связано с предыдущим значением или с совершенно другой строкой.

x = «Hello World!»

print(x[:6])

print(x[0:6] + «Guru99»)

Примечание: — Slice:6 или 0:6 дает тот же результат.

Метод строк Python replace()

Метод replace() возвращает копию строки, в которой значения старой строки были заменены новым значением.

oldstring = ‘I like Guru99’

newstring = oldstring.replace(‘like’, ‘love’)

print(newstring)

Хотите узнать, что необходимо для создания сайта?

Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

Смотреть видео

Изменение верхнего и нижнего регистра строк

В Python вы можете даже привести строку к верхнему или нижнему регистру.

string=«python at guru99»

print(string.upper())

Кроме того, вы также можете использовать другую функцию, такую как capitalize:

string=«python at guru99»

print(string.capitalize())

Вы также можете преобразовать строку в нижний регистр:

string=«PYTHON AT GURU99»

print(string.lower())

Использование для строки функции «join»

Функция join является более гибким способом объединения строк. С помощью функции join вы можете добавить в строку любой символ.

Например, если вы хотите добавить двоеточие (:) после каждого символа в строке «Python», вы можете использовать следующий код.

print(«:».join(«Python»))

Реверс строк

Используя функцию реверса, вы можете перевернуть строку. Например, если у нас есть строка «12345», а затем, если вы применяете код для обратной функции, как показано ниже.

string=«12345»

print(».join(reversed(string)))

Разделение строк

Разделение строк — это еще одна функция, которая может применяться в Python, давайте посмотрим на строку «guru99 career guru99». Сначала мы разделим строку с помощью команды word.split и получим результат.

word=«guru99 career guru99»

print(word.split(‘ ‘))

Чтобы лучше это понять, мы рассмотрим еще один пример разделения, вместо пробела (») мы используем (‘r’), и это будет разбивать строку везде, где в строке встречается ‘r’:

word=«guru99 career guru99»

print(word.split(‘r’))

Важное примечание: В Python строки являются неизменяемыми. Рассмотрим следующий код:

x = «Guru99»

x.replace(«Guru99»,«Python»)

print(x)

все равно возвращает Guru99. Это связано с тем, что x.replace («Guru99», «Python») возвращает копию X с выполненными заменами. Вам нужно будет использовать следующий код, чтобы увидеть изменения:

x = «Guru99»

x = x.replace(«Guru99»,«Python»)

print(x)

Приведенные выше коды являются примерами Python 3. Если вы хотите запустить Python 2, рассмотрите следующий код.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#Accessing Values in Strings

var1 = «Guru99!»

var2 = «Software Testing»

print «var1[0]:»,var1[0]

print «var2[1:5]:»,var2[1:5]

#Some more examples

x = «Hello World!»

print x[:6]

print x[0:6] + «Guru99»

#Python String replace() Method

oldstring = ‘I like Guru99’

newstring = oldstring.replace(‘like’, ‘love’)

print newstring

#Changing upper and lower case strings

string=«python at guru99»

print string.upper()

string=«python at guru99»

print string.capitalize()

string=«PYTHON AT GURU99»

print string.lower()

#Using «join» function for the string

print«:».join(«Python»)

#Reversing String

string=«12345»

print».join(reversed(string))

#Split Strings

word=«guru99 career guru99»

print word.split(‘ ‘)

word=«guru99 career guru99»

print word.split(‘r’)

x = «Guru99»

x.replace(«Guru99»,«Python»)

print x

x = «Guru99»

x = x.replace(«Guru99»,«Python»)

print x

В Python появилась функция .format, которая позволяет использовать %d и т. д. для форматирования строк.

Заключение

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

Доступ к значениям через разделение — квадратные скобки используются для нарезки вместе с индексом или индексами для получения подстроки.

В нарезке, если диапазон объявлен [1: 5], он может фактически извлечь значение из диапазона [1: 4]

Вы можете обновить строку Python, переназначив переменную другой строке

Метод replace() возвращает копию строки, в которой вхождение старых символов заменяется новыми.

Синтаксис для метода replace: oldstring.replace(«значение, на которое заменяем», «значение, которое заменяем»)

Строковые операторы, такие как [], [:], in, Not in и т. д., могут применяться для конкатенации строки, извлечения или вставки определенных символов в строку или для проверки того, существует ли определенный символ в строке

Другие строковые операции включают:

Изменение верхнего и нижнего регистра

Функция Join, чтобы добавить любой символ в строку

Реверс строк

Разделение строк

Источник: //www.guru99.com

Редакция: Команда webformyself.

Хотите узнать, что необходимо для создания сайта?

Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

Смотреть видео

Хотите узнать, что необходимо для создания сайта?

Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

Смотреть

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить строку меню mac os
  • Как изменить строку mysql
  • Как изменить строй на гитаре тюнером
  • Как изменить строение черепа
  • Как изменить строение лица

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии