- Строки¶
- Литералы строк¶
- Строки в апострофах и в кавычках¶
- Служебные символы¶
- «Сырые» строки¶
- Строки в тройных апострофах или кавычках¶
- Функции и методы строк¶
- Конкатенация (сложение)¶
- Дублирование строки¶
- Длина строки (функция len)¶
- Доступ по индексу¶
- Извлечение среза¶
- Другие функции и методы строк¶
- Форматирование строк¶
Строки¶
Строки в Python — упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме.
Литералы строк¶
Работа со строками в Python очень удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.
Строки в апострофах и в кавычках¶
Строки в апострофах и в кавычках — одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.
Служебные символы¶
Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.
Экранированная последовательность | Назначение |
---|---|
\n | Перевод строки |
\a | Звонок |
\b | Забой |
\f | Перевод страницы |
\r | Возврат каретки |
\t | Горизонтальная табуляция |
\v | Вертикальная табуляция |
\N | Идентификатор ID базы данных Юникода |
\uhhhh | 16-битовый символ Юникода в 16-ричном представлении |
\Uhhhh… | 32-битовый символ Юникода в 32-ричном представлении |
\xhh | 16-ричное значение символа |
\ooo | 8-ричное значение символа |
\0 | Символ Null (не является признаком конца строки) |
«Сырые» строки¶
Если перед открывающей кавычкой стоит символ r (в любом регистре), то механизм экранирования отключается.
Но, несмотря на назначение, «сырая» строка не может заканчиваться символом обратного слэша. Пути решения:
Строки в тройных апострофах или кавычках¶
Главное достоинство строк в тройных кавычках в том, что их можно использовать для записи многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и апострофов, главное, чтобы не было трех кавычек подряд.
>>> c = '''это очень большая . строка, многострочный . блок текста''' >>> c 'это очень большая\nстрока, многострочный\nблок текста' >>> print(c) это очень большая строка, многострочный блок текста
Функции и методы строк¶
Конкатенация (сложение)¶
>>> S1 = 'spam' >>> S2 = 'eggs' >>> print(S1 + S2) 'spameggs'
Дублирование строки¶
>>> print('spam' * 3) spamspamspam
Длина строки (функция len)¶
Доступ по индексу¶
>>> S = 'spam' >>> S[0] 's' >>> S[2] 'a' >>> S[-2] 'a'
Как видно из примера, в Python возможен и доступ по отрицательному индексу, при этом отсчет идет от конца строки.
Извлечение среза¶
Оператор извлечения среза: [X:Y] . X – начало среза, а Y – окончание;
символ с номером Y в срез не входит. По умолчанию первый индекс равен 0 , а второй — длине строки.
>>> s = 'spameggs' >>> s[3:5] 'me' >>> s[2:-2] 'ameg' >>> s[:6] 'spameg' >>> s[1:] 'pameggs' >>> s[:] 'spameggs'
Кроме того, можно задать шаг, с которым нужно извлекать срез.
>>> s[::-1] 'sggemaps' >>> s[3:5:-1] '' >>> s[2::2] 'aeg'
Другие функции и методы строк¶
При вызове методов необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.
>>> s = 'spam' >>> s[1] = 'b' Traceback (most recent call last): File "", line 1, in s[1] = 'b' TypeError: 'str' object does not support item assignment >>> s = s[0] + 'b' + s[2:] >>> s 'sbam'
Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.
Функция или метод | Назначение |
---|---|
S = ‘str’; S = «str»; S = »’str»’; S = «»»str»»» | Литералы строк |
S = «s\np\ta\nbbb» | Экранированные последовательности |
S = r»C:\temp\new» | Неформатированные строки (подавляют экранирование) |
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) | Форматирование строки |
Форматирование строк¶
Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, подставив в неё некоторые данные, полученные в процессе выполнения программы (пользовательский ввод, данные из файлов и т. д.). Подстановку данных можно сделать с помощью форматирования строк. Форматирование можно сделать с помощью оператора % , либо с помощью метода format .
Если для подстановки требуется только один аргумент, то значение — сам аргумент:
>>> 'Hello, <>!'.format('Vasya') 'Hello, Vasya!'
А если несколько, то значениями будут являться все аргументы со строками подстановки (обычных или именованных):
>>> ' , , '.format('a', 'b', 'c') 'a, b, c' >>> '<>, <>, <>'.format('a', 'b', 'c') 'a, b, c' >>> ' , , '.format('a', 'b', 'c') 'c, b, a' >>> ' , , '.format(*'abc') 'c, b, a' >>> ' '.format('abra', 'cad') 'abracadabra' >>> 'Coordinates: , '.format(latitude='37.24N', longitude='-115.81W') 'Coordinates: 37.24N, -115.81W' >>> coord = 'latitude': '37.24N', 'longitude': '-115.81W'> >>> 'Coordinates: , '.format(**coord) 'Coordinates: 37.24N, -115.81W'
Однако метод format умеет большее. Вот его синтаксис:
поле замены ::= "" имя поля ::= arg_name ("." имя атрибута | "[" индекс "]")* преобразование ::= "r" (внутреннее представление) | "s" (человеческое представление) спецификация ::= см. ниже
>>> "Units destroyed: ".format(players = [1, 2, 3]) 'Units destroyed: 1' >>> "Units destroyed: ".format(players = ['1', '2', '3']) "Units destroyed: '1'"
Теперь спецификация формата:
спецификация ::= [[fill]align][sign][#][0][width][,][.precision][type] заполнитель ::= символ кроме '' выравнивание ::= "" | "=" | "^" знак ::= "+" | "-" | " " ширина ::= integer точность ::= integer тип ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
Выравнивание производится при помощи символа-заполнителя. Доступны следующие варианты выравнивания:
Флаг | Значение |
---|---|
Символы-заполнители будут справа (выравнивание объекта по левому краю) (по умолчанию). | |
> | выравнивание объекта по правому краю. |
= | Заполнитель будет после знака, но перед цифрами. Работает только с числовыми типами. |
^ | Выравнивание по центру. |
Опция «знак» используется только для чисел и может принимать следующие значения:
Флаг | Значение |
---|---|
+ | Знак должен быть использован для всех чисел. |
— | — для отрицательных, ничего для положительных. |
Пробел | — для отрицательных, пробел для положительных. |
Поле «тип» может принимать следующие значения:
Тип | Значение |
---|---|
d , i , u | Десятичное число. |
o | Число в восьмеричной системе счисления. |
x | Число в шестнадцатеричной системе счисления (буквы в нижнем регистре). |
X | Число в шестнадцатеричной системе счисления (буквы в верхнем регистре). |
e | Число с плавающей точкой с экспонентой (экспонента в нижнем регистре). |
E | Число с плавающей точкой с экспонентой (экспонента в верхнем регистре). |
f , F | Число с плавающей точкой (обычный формат). |
g | Число с плавающей точкой. с экспонентой (экспонента в нижнем регистре), если она меньше, чем -4 или точности, иначе обычный формат. |
G | Число с плавающей точкой. с экспонентой (экспонента в верхнем регистре), если она меньше, чем -4 или точности, иначе обычный формат. |
c | Символ (строка из одного символа или число — код символа). |
s | Строка. |
% | Число умножается на 100 , отображается число с плавающей точкой, а за ним знак % . |
И напоследок, несколько примеров:
>>> coord = (3, 5) >>> 'X: ; Y: '.format(coord) 'X: 3; Y: 5' >>> "repr() shows quotes: ; str() doesn't: ".format('test1', 'test2') "repr() shows quotes: 'test1'; str() doesn't: test2" >>> ' '.format('left aligned') 'left aligned ' >>> '30>'.format('right aligned') ' right aligned' >>> ' '.format('centered') ' centered ' >>> ' '.format('centered') # use '*' as a fill char '***********centered***********' >>> ' ; '.format(3.14, -3.14) # show it always '+3.140000; -3.140000' >>> ' ; '.format(3.14, -3.14) # show a space for positive numbers ' 3.140000; -3.140000' >>> ' ; '.format(3.14, -3.14) # show only the minus -- same as '; ' '3.140000; -3.140000' >>> # format also supports binary numbers >>> "int: ; hex: ; oct: ; bin: ".format(42) 'int: 42; hex: 2a; oct: 52; bin: 101010' >>> # with 0x, 0o, or 0b as prefix: >>> "int: ; hex: ; oct: ; bin: ".format(42) 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010' >>> points = 19.5 >>> total = 22 >>> 'Correct answers: '.format(points/total) 'Correct answers: 88.64%'