6 сентября 2012 г.

Строки, углубляемся

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

В данном уроке углубимся в их изучении.

Операция  - Интерпретация
S = ‘’  - Пустая строка
S = “spam’s” Строка в кавычках
S = ‘s\np\ta\x00m’  - Экранированные последовательности
block = “””...”””  - Блоки в тройных кавычках
S = r’\temp\spam’ - Не форматированные строки
S = b’spam’  - Строки байтов в версии 3.0
S = u’spam’ - Строки с символами Юникода.  
                               Только в версии 2.6

S1 + S2, S * 3 - Конкатенация, повторение

S[i]  
S[i:j] -Обращение к символу по индексу, извлечение подстроки (среза), длина
len(S)

“a %s parrot” % kind - Выражение форматирования строки
“a {0} parrot”.format(kind)Строковый метод форматирования в 2.6 и 3.0
S.find(‘pa’)  - Вызов строкового метода: поиск
S.rstrip() - Удаление ведущих и конечных пробельных символов
S.replace(‘pa’, ‘xx’)  - Замена
S.split(‘,’) - Разбиение по символу-разделитлю
S.isdigit() - Проверка содержимого
S.lower() - Преобразование регистра символов
S.endswith(‘spam’) - Проверка окончания строки
‘spam’.join(strlist) - Сборка строки из списка
S.encode(‘latin-1’)  - Кодирование строк Юникода.


Множество способов записи строк в программном коде:
  • Строки в апострофах: ‘spa”m’
  • Строки в кавычках: “spa’m”
  • Строки в тройных кавычках: ‘’’... spam ...’’’ , “””... spam ...””” 
  • Экранированные последовательности: “s\tp\na\0m”
  • Неформатированные строки: r”C:\new\test.spm”
  • Строки байтов в версии 3.0: b’sp\x01am’
  • Строки символов Юникода, только в версии 2.6 : u’eggs\u0020spam’

Строки в апострофах и в кавычках – это одно и то же
>>> ‘shrubbery’, “shrubbery”
(‘shrubbery’, ‘shrubbery’)


>>> ‘knight”s’, “knight’s”
(‘knight”s’, “knight’s”)


 Python автоматически объединяет последовательности строковых литералов внутри выражения.
>>> title = “Meaning “ ‘of’ “ Life” # Неявная конкатенация
>>> title
‘Meaning of Life’


>>> ‘knight\’s’, “knight\”s”
(“knight’s”, ‘knight”s’)


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


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

>>> s = ‘a\nb\tc’

\n  образует  единственный  символ  –  байт,  содержащий 
двоичное значение кода символа новой строки в используемом наборе символов (обычно ASCII-код 10). Аналогично последовательность \t замещается символом  табуляции.


>>> s
‘a\nb\tc’
>>> print(s)
a
b       c


Последовательность  - Назначение
\newline - Игнорируется (продолжение на новой строке)
\\ - Сам символ обратного слеша (остается один символ \)
\’ - Апостроф (остается один символ ‘)
\” - Кавычка (остается один символ “)
\a - Звонок
\b - Забой
\f - Перевод формата
\n - Новая строка (перевод строки)
\r - Возврат каретки
\t - Горизонтальная табуляция
\v - Вертикальная табуляция
\xhh - Символ с шестнадцатеричным кодом hh (не более 2 цифр)
\ooo - Символ с восьмеричным кодом ooo (не более 3 цифр)
\0 - Символ Null (не признак конца строки)
\N{id} - Идентификатор ID базы данных Юникода 
\uhhhh - 16-битный символ Юникода в шестнадцатеричном представлении
\Uhhhhhhhh - 32-битный символ Юникода в шестнадцатеричном представлении
\другое - Не является экранированной последовательностью 
(символ обратного слеша сохраняется)
>>> S = “s\tp\na\x00m”
>>> S
‘s\tp\na\x00m’
>>> len(S)
7
>>> print(S)
s p
a m
-----------------------------------------------------------------
>>> x = “C:\py\code”     # Символ \ сохраняется в строке
>>> x
‘C:\\py\\code’
>>> len(x)
10
-----------------------------------------------------------------
>>> path = r’C:\new\text.dat’
>>> path   # Показать, как интерпретатор представляет эту строку

‘C:\\new\\text.dat’
>>> print(path)          # Более дружественный формат представления
C:\new\text.dat
>>> len(path)            # Длина строки
15

Базовые операции:

>>> len(‘abc’)    # Длина: число элементов
3
>>> ‘abc’ + ‘def’ # Конкатенация: новая строка
‘abcdef’
>>> ‘Ni!’ * 4     # Повторение: подобно “Ni!” + “Ni!” + ...
‘Ni!Ni!Ni!Ni!’


>>> print(‘------- ...много дефисов... ---’) # 80 дефисов, сложный способ
>>> print(‘-’ * 80)    # 80 дефисов, простой способ


>>> myjob = “hacker”
>>> for c in myjob: print(c, end=’ ‘), # Обход элементов строки в цикле
...
h a c k e r
>>> “k” in myjob                    # Найдено
True
>>> “z” in myjob                    # Не найдено
False
>>> ‘spam’ in ‘abcspamdef’          # Поиск подстроки, позиция не                          возвращается
True


>>> S = ‘spam’
>>> S[0], S[-2]           # Индексация от начала или от конца
(‘s’, ‘a’)
>>> S[1:3], S[1:], S[:-1] # Получение среза: извлечение подстроки
(‘pa’, ‘pam’, ‘spa’)


>>> S = ‘abcdefghijklmnop’
>>> S[1:10:2]
‘bdfhj’
>>> S[::2]
‘acegikmo’


>>> S = ‘hello’
>>> S[::-1]
‘olleh’


>>> S = ‘abcedfg’
>>> S[5:1:-1]
‘fdec’

>>> int(“42”), str(42) # Преобразование из/в строки
(42, ‘42’)
>>> repr(42),          # Преобразование в строку, как если бы она была 
‘42’                   # литералом в программном коде

Функция int  преобразует  строку  в  число, а  функция  str преобразует  число в строковое представление.
>>> print(str(‘spam’), repr(‘spam’))
(‘spam’, “’spam’”)
>>> S = “42”
>>> I = 1
>>> S + I
>>> int(S) + I    # Операция сложения
43
>>> S + str(I)    # Операция конкатенации
‘421’

ord – она возвращает фактическое числовое значение соответствующего 
байта в памяти. Обратное преобразование выполняется с помощью функции chr, она получает целочисленный код ASCII и преобразует его в соответствующий символ:
>>> ord(‘s’)
115
>>> chr(115)
‘s’
----------------------
>>> int(‘1101’, 2) # Преобразовать двоичное представление в целое число
13
>>> bin(13)        # Преобразовать целое число в двоичное представление
‘0b1101’
-----------------------
>>> S = S + ‘SPAM!’ # Чтобы изменить строку, нужно создать новую

>>> S

‘spamSPAM!’
>>> S = S[:4] + ‘Burger’ + S[-1]
>>> S
‘spamBurger!’

>>> S = ‘splot’
>>> S = S.replace(‘pl’, ‘pamal’)
>>> S
‘spamalot’

Изменение строк
Вспомните термин "неизменяемая последовательность". "Неизменяемая" - означает, что вы не можете изменить содержимое самой строки в памяти(то есть невозможно изменить элемент строки, если выполнить присваивание по индексу):

>>> S = 'SPAM'
>>> S[0] = 'X'
Error!

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

Форматирование строк
Чтобы отформатировать строку, требуется:
1.  Слева от оператора % указать строку формата, содержащую один или более
спецификаторов формата, каждый из которых начинается с символа % (на-
пример, %d).
2.  Справа от оператора % указать объект (или объекты, в виде кортежа), значе-
ние которого должно быть подставлено на место спецификатора (или специ-
фикаторов) в левой части выражения.

Например:

>>> ‘That is %d %s bird!’ % (1, ‘dead’) # Выражение форматирования
That is 1 dead bird!


Спецификаторы формата
Спецификатор - Назначение
s   - Строка (для объекта любого другого типа будет выполнен 
      вызов функции str(X), чтобы получить строковое представ-
      ление объекта)
r - s, но использует функцию repr, а не str
c - Символ
d - Десятичное (целое) число
i - Целое число
u - То же, что и d (устарел: больше не является представлени-
    ем целого без знака)
o - Восьмеричное целое число
x - Шестнадцатеричное целое число
X - x, но шестнадцатеричные цифры возвращаются в верхнем 
    регистре
e - Вещественное число в экспоненциальной форме
E - e, но алфавитные символы возвращаются в верхнем 
    регистре
f - Вещественное число в десятичном представлении
F - Вещественное число в десятичном представлении
g - Вещественное число e или f
G - Вещественное число E или а
% - Символ %


>>> x = 1234
>>> res = “integers: ...%d...%-6d...%06d” % (x, x, x)
>>> res
‘integers: ...1234...1234 ...001234’

Пример форматирования из словаря:
>>> “%(n)d %(x)s” % {“n”:1, “x”:”spam”}
‘1 spam’

Комментариев нет:

Отправить комментарий