Python с нуля — часть 7: строки

 

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

Создать строку можно просто заключив символы в кавычки, при этом для Python одинарные кавычки (' ') имеют такое же значение, как и двойные (" ").

Создаётся строка простым присваивание значения переменной. Например:

var1 ='Hello World!'
var2 ="Python Programming"

Получение значений из строк

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

Например:

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

Результат выполнения этого кода:

var1[0]:  H
var2[1:5]:  ytho

Обновление данных в строках

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

var1 = 'Hello World!'

print "Updated String :- ", var1[:6] + 'Python'

Результат выполнения:

Updated String :-  Hello Python

Примечание: вообще, строки в Python являются неизменяемыми (immutable) объектами, и прямое присваивание нового значения элементу списка вызовет ошибку:

>>> string = 'String'; print string
String
>>> string[6] = 'G'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

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

>>> string = 'String'; print id(string)
682907136
>>> string[:5] + 'G'; print id(string)
'StrinG'
682907136

Escape-последовательности

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

Они обрабатываются как в одинарных, так и в двойных кавычках.

Backslash
notation
Hexadecimal
character
Description
a 0x07 звуковой сигнал или предупреждение
b 0x08 возврат на одну позицию
cx control-x
C-x control-x
e 0x1b escape
f 0x0c команда принтера
M-C-x meta-Control-x
n 0x0a новая строка
nnn восьмеричное значение
r 0x0d возврат каретки
s 0x20 пробел
t 0x09 табуляция
v 0x0b вертикальная табуляция
x символ x
xnn шестнадцатеричное значение

Специальные строковые операторы

Предположим, переменная строки a содержит ‘Hello‘, а переменная b – ‘Python‘:

Operator Description Example
+ конкатенация – добавление значений с обеих сторон от оператора a + b вернёт HelloPython
* повторение – создаёт новую строку, в которой объединены копии той же строки a*2 вернёт HelloHello
[] срез (slice) – возвращает символ с указанным индексом a[1] вернёт e
[ : ] срез диапазона – возвращает символы с заданном диапазоне индексов a[1:4] вернёт ell
in членство (membership) – возвращает истину (true, 1) если заданный символ присутствует в строке H in a вернёт 1
not in членство  (membership) – возвращает истину (true, 1) если заданный символ не присутствует в строке M not in a вернёт 1
r/R обычная строка (raw string) – подавляет значение escape-последовательностей; синтаксис таких строк такой же, как  и у обычных строк, за исключением оператора r или R, который добавляется непосредтсвенно перед открывающей кавычкой print r’n’ вернёт  n и print R’n’ вернёт  n
% format – выполнение форматирования строки см. далее

Оператор форматирования строк

Одна из наиболее приятных возможностей в Python – оператор %. Этот оператор уникален для строковых типов данных и подобен функции printf() из языка С:

>>> print "My name is %s and weight is %d kg!" % ('Zara', 21)
My name is Zara and weight is 21 kg!

Другой, более наглядный и простой пример:

>>> print '%s is %s' % ('one', 'two')
one is two

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

Format Symbol Conversion
%c один символ
%s преобразование строки данными другого str()-объекта
%i алиас %d
%d целое десятичное число
%u то же, что и %d (устарев?)
%o восьмеричное целое
%x шестнадцатеричное целое (строчные буквы)
%X шестнадцатеричное целое (ПРОПИСНЫЕ буквы)
%e экспоненциальное представление (строчная ‘e’)
%E экспоненциальное представление (прописная ‘e’)
%f вещественное число в десятичном виде
%g краткая версия для %f и %e
%G краткая версия для %f и %E

Кроме этого, есть дополнительные возможности:

Symbol Functionality
* argument specifies width or precision
left justification
+ display the sign
<sp> leave a blank space before a positive number
# add the octal leading zero ( ‘0’ ) or hexadecimal leading ‘0x’ or ‘0X’, depending on whether ‘x’ or ‘X’ were used.
0 pad from left with zeros (instead of spaces)
% ‘%%’ leaves you with a single literal ‘%’
(var) mapping variable (dictionary arguments)
m.n. m is the minimum total width and n is the number of digits to display after the decimal point (if appl.)

Тройные кавычки

Тройные кавычки в Python позволяют располагать текст в несколько строк и использовать в нём специальные символы, такие как табуляция (t), новая строка (n) и другие.

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

Синтаксис тройных кавычек представляет собой набор из трёх открывающих последовательных одинарных или двойных кавычек – и трёх закрывающих.

#!/usr/bin/python

para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print para_str;

Результат выполнения этого кода:

this is a long string that is made up of
several lines and non-printable characters such as
TAB (    ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
 ], or just a NEWLINE within
the variable assignment will also show up.

Обратите внимание, что каждый специальный символ был превращен в его “печатную форму”, а новые строки отображаются либо прямым переводом строки в тексте, либо escape-последовательностью (n).

“Сырые строки” (raw strings) не обрабатывают символ обратно слеша как специальный символ. Каждый символ, который указан в такой строке будет отображён “как есть”:

#!/usr/bin/python

print 'C:nowhere'

Результат выполнения этого кода:

C:nowhere

Теперь – давайте сделаем “необработанную строку” с помощью символа r перед открывающей кавычкой:

#!/usr/bin/python

print r'C:nowhere'

Результат выполнения:

C:nowhere

Строки с unicode

Обычные строки в Python записываются с помощью таблицы 8-ми битной ASCII символов, тогда как Unicode-строки хранятся в 16-ти битной таблице. Это позволяет использовать более разнообразные символы в ней, включая специальные символы различных языков.

Мы ограничимся такой Unicode-строкой:

#!/usr/bin/python

print u'Hello, world!'

Результат её выполнения:

Hello, world!

Как видно, Unicode-строки используют объявление с помощью символа u, так же как raw-строки используют объявление с помощью префикса r.

Встроенные строковые методы (или методы строк)

UPD: смотрите более полное описание строковых методов тут>>>.

В Python имеются такие встроенные методы для управление строками:

SN Methods with Description
1 capitalize()
делает первую букву Заглавной;
2 center(width, fillchar)
возвращает новую строку, смещенную к центру на указанное количество символов;
3 count(str, beg= 0,end=len(string))
подсчитывает количество вхождений заданных символов в переданной строке;
4 decode(encoding=’UTF-8′,errors=’strict’)
декодирует строку, используя заданный метод кодировки;
5 encode(encoding=’UTF-8′,errors=’strict’)
кодирует строку, используя заданный метод кодировки;
6 endswith(suffix, beg=0, end=len(string))
определяет, заканчивается ли строка заданным суффиксом; возвращает истину (true) если да, и ложь (false) в противном случае;
7 expandtabs(tabsize=8)
увеличивает количество пробелов для табуляции, по-умолчанию – 8;
8 find(str, beg=0 end=len(string))
Определяет, содержатся ли заданные символы в в строке, и возвращает их индкс если найдены или -1 если нет;
9 index(str, beg=0, end=len(string))
тоже, что и find(), но приводит к ошибке если не найдено;
10 isalnum()
возвращает истину (true), если в строке содержится хотя бы один символ, и все символы являются буквенно-цифровыми;
11 isalpha()
возвращает истину (true), если в строке содержится хотя бы один символ, и все символы являются  буквами;
12 isdigit()
возвращает истину (true), если в строке содержится хотя бы один символ, и все символы являются цифрами;
13 islower()
возвращает true, если строка содержит хотя бы один символ и все символы в строке строчные;
14 isnumeric()
возвращает true, если unicode-строка содержит только цифры;
15 isspace()
возвращает true, если строка состоит из пробелов;
16 istitle()
возвращает true, если строка содержит правильно оформленные заглавные буквы (т.е. – только первые в предложении);
17 isupper()
возвращает true, если строка содержит хотя бы один форматированный символ и все символы – заглавные;
18 join(seq)
объединяет заданные в последовательности seq объекты в один список с заданным в строке разделителем;
19 len(string)
возвращает количество символов в строке;
20 ljust(width[, fillchar])
Returns a space-padded string with the original string left-justified to a total of width columns
21 lower()
меняет все заглавные буквы в строке в строчные;
22 lstrip()
удаляет все пробелы в начале строки;
23 maketrans()
создаёт таблицу для перевода функцией translate();
24 max(str)
возвращает наибольший (последний) по алфавиту символ из строки (Eng);
25 min(str)
возвращает наименьший (первый) по алфавиту символ из строки (Eng);
26 replace(old, new [, max])
меняет заданные символы в строке на новые;
27 rfind(str, beg=0,end=len(string))
тоже, что и find(), но ищет в обратном направлении;
28 rindex( str, beg=0, end=len(string))
тоже, что и index(), о ищет в обратном направлении;
29 rjust(width,[, fillchar])
Returns a space-padded string with the original string right-justified to a total of width columns.
30 rstrip()
удаляет все пробелы в конце строки;
31 split(str=””, num=string.count(str))
разделяет строку по заданному в str символу и возвращает новые строки (новыми объектами); разделяет максимум = num раз, если указано;
32 splitlines( num=string.count(‘n’))
Splits string at all (or num) NEWLINEs and returns a list of each line with NEWLINEs removed
33 startswith(str, beg=0,end=len(string))
определяет, начинается ли строка с заданного в str символа; возвращает true если да;
34 strip([chars])
выполняет lstrip() и rstrip();
35 swapcase()
изменяет регистр всех символов на обратный;
36 title()
возвращает “заглавную” версию строки, где все слова начинаются с Заглавной буквы, а остальные символы – строчные;
37 translate(table, deletechars=””)
переводит строку в соответствии с с таблицей перевода;
38 upper()
меняет все строчные символы на прописные;
39 zfill (width)
Returns original string leftpadded with zeros to a total of width characters; intended for numbers, zfill() retains any sign given (less one zero)
40 isdecimal()
возвращает true, если unicode-строка содержит только десятичные символы;