Строковые значения в Python, да и в большинстве других языков, являются одними из самых распространённых. Нередко для работы с пользователями, сбора, обработки и вывода информации мы используем строковые значения, поэтому важно знать основные операции, используемые при работе со строками. Строковое значение в Python (далее «строка», «строки»), это набор отдельных символов Unicode, при объявлении строки в коде используется следующая форма:
str_1 = "Mark"
str_2 = 'Mark'
То есть, переменной присваивается строка, её обязательно оборачивать в кавычки. Либо в двойные, либо в одинарные. Особенной разницы между ними нет.
Объединение строк
Если вы хотите объединить (конкатенировать) значение двух строчных переменных, то вам необходимо использовать символ +:
name = "Mark "
surname = 'Johnson'
result = name + surname # Mark Johnson
Также при конкатенации можно добавить произвольное строчное значение:
name = "Mark "
surname = 'Johnson'
result = name + surname + ": mjohnson@gmail.com" # Mark Johnson: mjohnson@gmail.com
Экранированные последовательности
Представим ситуацию. Вам нужно написать текст, в котором присутствует цитата, например:
quote = "И он сказал: "Встань и иди""
Это вызовет ошибку интерпретатора, т.к. кавычки в данном случае являются синтаксическим инструментом, определяющим строку, но интерпретатор увидит строку только в этой области:
quote = "И он сказал: "
Ведь он ждёт открывающих и закрывающих кавычек. А последующие кавычки считает отдельной последовательностью, т.е. интерпретатор, условно увидит эту инструкцию вот так:
quote = "И он сказал: "
Встань и иди""
Первая строка без ошибок. Вторая – одна сплошная ошибка. Чтобы исправить эту ситуацию нужно экранировать кавычки в тексте при помощи символа \:
quote = "И он сказал: \"Встань и иди\""
Или так:
quote = 'И он сказал: \'Встань и иди\''
Тогда эти кавычки будут интерпретированы как текст. Если вы не хотите экранировать кавычки, можете использовать разные типы кавычек в одном выражении. В двойных кавычках можно не экранировать одинарные:
quote = "И он сказал: 'Встань и иди'"
В одинарных кавычках можно не экранировать двойные:
quote = 'И он сказал: "Встань и иди"'
Помимо символа обратного слеша \ есть ещё ряд подобных символов, основные из них: «\\» - экранирование самого символа, остаётся один «\».
print("Один слеш: \\")
Выведет:
Один слеш: \
Хотя в тексте мы явно указали два обратных слеша. «\n» - перевод строки. Переводит часть строчного значения на новую строку.
print("- Назови моё имя..\n- Хайзенберг")
Выведет:
- Назови моё имя..
- Хайзенберг
Другие escape последовательности
Сравниваем строки
Иногда, в наши приложения могут приходить строчные данные, которые необходимо проверить на соответствие определённому шаблону. Допустим, мы отправляем запрос на сайт, проверяя статус заказа. Он может быть: failed или success, если статус success, то выполняем определённые действия, иначе – ничего не делаем.
Для этого нам достаточно провести простое логическое сравнение двух строк:
status = get_status()
true_status = status == "success" # boolean
if true_status:
print("That's good")
Если строки равны друг другу, то возвращается True, иначе – False.
Вхождение в строку
Иногда, нам необходимо проверить, есть ли в конкретном фрагменте текста слово или словосочетание, это сделать также несложно, при помощи ключевого слова in:
string = "Мама мыла раму"
if "раму" in string:
print("Success!")
При работе со сбором данных и написанием всяких чат-ботов – незаменимое и изящное решение языка. Но мы не всегда можем знать, в каком регистре находится искомое слово, например, оно начинается с большой буквы, а мы ищем с маленькой. Де-факто, слово в тексте присутствует, но найдено оно не будет.
Например, при таких условиях поиска в консоль ничего не выведется:
string = "Мама мыла Раму"
if "раму" in string:
print("Success!")
Для того чтобы исправить эту проблему мы можем перевести рассматриваемую строку и слово, которое мы ищем в один общий регистр. Для этого есть специальные функции: lower() и upper().
Функция lower() переводит строку в нижний регистр, а upper() в верхний:
string = "Мама мыла Раму" print(string.lower()) print(string.upper())
В консоль выведет:
мама мыла раму МАМА МЫЛА РАМУ
Используя данные функции мы значительно улучшили и обезопасили нашу программу:
string = "Мама мыла Раму"
find = "РаМу"
if find.lower() in string.lower():
print("Success!")
Теперь слова и буквы могут быть в совершенно любом регистре, но вхождение подстроки в строку будет найдено (если искомое слово присутствует в строке в любом регистре).
Длина строки
Длина строки определяется при помощи функции len:
word = "Привет, юный питонист!"
print(len(word))
Выводит:
22
Обращение по индексу
Строка – это последовательность символов Unicode, поэтому её можно интерпретировать как некоторую структуру данных, по типу списка, в котором каждый элемент имеет свою позицию. К каждому элементу строки можно обращаться как к элементу списка:
word = "Привет, юный питонист!"
print(word[0])
print(word[1])
print(word[2])
print(word[3])
Выводит:
П р и в
Подобно элементам списка, символы строки можно получать и с конца, при помощи отрицательного индекса:
word = "Привет, юный питонист!"
print(word[-1])
print(word[-2])
print(word[-3])
print(word[-4])
Выводит:
! т с и
Получить часть строки. Слайсы
Часто необходимо обрезать длинную строку, сделав её меньше. Например, получить только первые 10 символов. Замечательная новость в том, что мы можем обрезать строку на основе механизма слайсов:
word = "Привет, юный питонист!"
print(word[:10:])
Выведет:
Привет, юн