Освой Python играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Python: Str (Строки)

format
F-strings: новый способ форматирования
Байтовые строки

В Python строки относятся к классу str вместо привычных String в других языках. Полный список методов класса можно узнать через команду:


print(str)

Строки можно обрамлять одинарными или двойными кавычками. Два варианта позволяют вставлять в литералы строк символы кавычек или апострофов, не используя экранирование. В обычных случаях проще использовать одинарные кавычки, которые проще набрать с клавиатуры без использования клавиши Shift.


print("Мурзик")
print('Барсик')
print('Рыжик любил полежать на крыше автомобиля "Жигули"')

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


print("Мурзик\t5 лет") # табуляция
print('Рыжик любил полежать \nна крыше автомобиля "Жигули"') # перевод строки
print(r'D:\cats.txt') # отключение экранирования

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


pushkin = """У лукоморья дуб зелёный;
Златая цепь на дубе том:
И днём и ночью кот учёный
Всё ходит по цепи кругом;
Идёт направо - песнь заводит,
Налево - сказку говорит."""
print(pushkin)

Длину строки можно узнать через метод len().


str = "cat"
print(len(str)) # 3

Склеиваем две строки

Склейка двух строк (concatinate) происходит очень просто через сложение.


str1 = "Hello"
str2 = "Kitty"
concat = str1 + " " + str2
print(concat)

Метод split(): разбить строку

Разбить строку по указанному разделителю можно через функцию split(). По умолчанию в качестве разделителя используется пробел.


terminator = "I\'ll be back."
list = terminator.split()
print(list[0]) # I'll

Укажем разделитель явно.


myString = "one|two|three"
list = myString.split("|")
print(list[1])

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


myString = "one|two|three"
list = myString.split("|", 1)
print(list[1]) # two|three

"Умножаем" строку (повтор)

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


str = "cat"
repeatedStr = str * 3
print(repeatedStr)

Доступ к отдельному символу можно получить по индексу.


cat = "кот"
print(cat[0])
print(cat[1])
print(cat[2])

Можно указывать отрицательные значения, тогда отсчёт пойдёт с конца строки, начиная с -1.


cat = "кот"
print(cat[-1]) # т
print(cat[-2]) # о
print(cat[-3]) # к

Можно получить срез строки, указав начало индекса и конец, который не входит в срез.


cat = "скотина"
print(cat[1:4]) # кот

Возможные другие варианты среза. Смотрите примеры.


cat = "скотина"
print(cat[1:-3]) # кот
print(cat[:4])   # скот
print(cat[3:])   # тина
print(cat[:])    # скотина

Можно задать шаг, с которым нужно извлекать срез.


cat = "скотина"
print(cat[::-1])  # анитокс
print(cat[1:6:2]) # ктн
print(cat[2::2])  # оиа

Для удаления символов новой строки в конце строки можно использовать метод rstrip("\r\n") без удаления конечных пробелов:


>>> lines = ("line 1 \r\n"
... "\r\n"
... "\r\n")
>>> lines.rstrip("\r\n")
'line 1 '

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

format

Мощная функция с большими возможностями для форматирования строк.

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


print('Hello, {} !'.format('Kitty'))

Другие варианты.


print('{1}, {0}, {2}'.format('Кошка', 'Кот', 'Котёнок')) # Кот, Кошка, Котёнок
print('{}, {}, {}'.format('Кошка', 'Кот', 'Котёнок')) # Кошка, Кот, Котёнок

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

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


print('Барсик')
print('Мурзик', end='')
print('Васька')

# Результат Барсик МурзикВаська

F-strings: новый способ форматирования

Всё же format() не слишком читабелен и удобен при большом количестве параметров. Гораздо приятнее использовать новый способ. Нужно всего лишь подставить символ f перед кавычками и затем просто подставлять имена переменных в фигурных скобках.


catName = 'Рыжик'
age = 7
print(f"Моего кота зовут {catName}, ему {age} лет")

Байтовые строки

Байтовые строки очень похожи на обычные строки, но с небольшими отличиями.

Создадим байтовую строку.


b'bytes'
# b'bytes'

'Байты'.encode('utf-8')
# b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'

bytes('bytes', encoding = 'utf-8')
# b'bytes'

bytes([50, 100, 76, 72, 41]) # числам от 0 до 255 соответствуют символы как у chr()
# b'2dLH)'

Байтовые строки используют для записи в файл или чтения из него.

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


b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'.decode('utf-8')
# 'Байты'
Реклама