Листинг
ключ
Ключ из словаря.
Листинг
флаги
Дополнительные свойства преобразования.
Листинг
шир
Минимальная ширина поля.
Листинг
точность
Точность (для чисел с плавающей запятой).
Листинг
длина_типа
Модификатор типа.
Листинг
спецификатор
Тип представления выводимого объекта.
В следующей таблице приведены некоторые наиболее употребительные значения для спецификации форматирования.
Символ Где применяется Что указывает
0 флаг Заполнение нулями слева
— флаг Выравнивание по левому краю
+ флаг Обязательный вывод знака числа
пробел флаг Использовать пробел на месте знака числа
d, i спецификатор Знаковое целое
u спецификатор Беззнаковое целое
o спецификатор Восьмеричное беззнаковое целое
x, X спецификатор Шестнадцатеричное беззнаковое целое (со строчными или прописными латинскими буквами)
e, E спецификатор Число с плавающей запятой в формате с экспонентой
f, F спецификатор Число с плавающей запятой
g, G спецификатор Число с плавающей точкой в более коротком написании (автоматически выбирается e или f)
с спецификатор Одиночный символ (целое число или односимвольная строка)
r спецификатор Любой объект, приведенный к строке функцией repr()
s спецификатор Любой объект, приведенный к строке функцией str()
% спецификатор Знак процента. Для задания одиночного процента необходимо записать %%
Индексы и срезы
Следует напомнить, что строки являются неизменчивыми последовательностями, поэтому к ним можно применять операции взятия элемента по индексу и срезы:
Листинг
>>> s = «транспорт»
>>> print s[0], s[-1]
т т
>>> print s[-4:]
порт
>>> print s[:5]
транс
>>> print s[4:8]
спор
Примечание:
При выделении среза нумеруются не символы строки, а промежутки между ними.
Модуль string
До того как у строк появились методы, для операций над строками применялся модуль string. Приведенный пример демонстрирует, как вместо функции из string использовать метод (кстати, последнее более эффективно):
Листинг
>>> import string
>>> s = «one,two,three»
>>> print string.split(s, ",")
['one', 'two', 'three']
>>> print s.split(",")
['one', 'two', 'three']
В версии Python 3.0 функции, которые доступны через методы, более не будут дублироваться в модуле string.
В Python 2.4 появилась альтернатива использованию операции форматирования: класс Template. Пример:
Листинг
>>> import string
>>> tpl = string.Template("$a + $b = ${c}»)
>>> a = 2
>>> b = 3
>>> c = a + b
>>> print tpl.substitute(vars())
2 + 3 = 5
>>> del c # удаляется имя c
>>> print tpl.safe_substitute(vars())
2 + 3 = $c
>>> print tpl.substitute(vars(), c=a+b)
2 + 3 = 5
>>> print tpl.substitute(vars())
Traceback (most recent call last):
File "/home/rnd/tmp/Python–2.4b2/Lib/string.py», line 172, in substitute
return self.pattern.sub(convert, self.template)
File "/home/rnd/tmp/Python–2.4b2/Lib/string.py», line 162, in convert
val = mapping[named]
KeyError: 'c'
Объект–шаблон имеет два основных метода: substitute() и safe_substitute(). Значения для подстановки в шаблон берутся из словаря (vars() содержит словарь со значениями переменных) или из именованных фактических параметров. Если есть неоднозначность в задании ключа, можно использовать фигурные скобки при написании ключа в шаблоне.
Методы строк
В таблице ниже приведены некоторые наиболее употребительные методы объектов–строк и unicode–объектов.
Метод Описание
center(w) Центрирует строку в поле длины w
count(sub) Число вхождений строки sub в строке
encode([enc[, errors]]) Возвращает строку в кодировке enc. Параметр errors может принимать значения «strict» (по умолчанию), «ignore», «replace» или «xmlcharrefreplace»
endswith(suffix) Оканчивается ли строка на suffix
expandtabs([tabsize]) Заменяет символы табуляции на пробелы. По умолчанию tabsize=8
find(sub [,start [,end]]) Возвращает наименьший индекс, с которого начинается вхождение подстроки sub в строку. Параметры start и end ограничивают поиск окном start:end, но возвращаемый индекс соответствует исходной строке. Если подстрока не найдена, возвращается–1
index(sub[, start[, end]]) Аналогично find(), но возбуждает исключение ValueError в случае неудачи
alnum() Возвращает True, если строка содержит только буквы и цифры и имеет ненулевую длину. Иначе — False
isalpha() Возвращает True, если строка содержит только буквы и длина ненулевая
isdecimal() Возвращает True, если строка содержит только десятичные знаки (только для строк Unicode) и длина ненулевая
isdigit() Возвращает True, если содержит только цифры и длина ненулевая
islower() Возвращает True, если все буквы строчные (и их более одной), иначе — False
isnumeric() Возвращает True, если в строке только числовые знаки (только для Unicode)
isspace() Возвращает True, если строка состоит только из пробельных символов. Внимание! Для пустой строки возвращается False
join(seq) Соединение строк из последовательности seq через разделитель, заданный строкой
lower() Приводит строку к нижнему регистру букв
lstrip() Удаляет пробельные символы слева
replace(old, new[, n]) Возвращает копию строки, в которой подстроки old заменены new. Если задан параметр n, то заменяются только первые n вхождений
rstrip() Удаляет пробельные символы справа
split([sep[, n]]) Возвращает список подстрок, получающихся разбиением строки a разделителем sep. Параметр n определяет максимальное количество разбиений (слева)
startswith(prefix) Начинается ли строка с подстроки prefix
strip() Удаляет пробельные символы в начале и в конце строки
translate(table) Производит преобразование с помощью таблицы перекодировки table, содержащей словарь для перевода кодов в коды (или в None, чтобы удалить символ). Для Unicode–строк
translate(table[, dc]) То же, но для обычных строк. Вместо словаря — строка перекодировки на 256 символов, которую можно сформировать с помощью функции string.maketrans(). Необязательный параметр dc задает строку с символами, которые необходимо удалить
upper() Переводит буквы строки в верхний регистр
В следующем примере применяются методы split() и join() для разбиения строки в список (по разделителям) и обратное объединение списка строк в строку
Листинг
>>> s = «This is an example.»
>>> lst = s.split(" ")
>>> print lst
['This', 'is', 'an', 'example.']
>>> s2 = "\n».join(lst)
>>> print s2
This
is
an
example.
Для проверки того, оканчивается ли строка на определенное сочетание букв, можно применить метод endswith():
Листинг
>>> filenames = [«file.txt», «image.jpg», «str.txt»]
>>> for fn in filenames:
… if fn.lower().endswith(".txt»):
… print fn
…
file.txt
str.txt
Поиск в строке можно осуществить с помощью метода find(). Следующая программа выводит все функции, определенные в модуле оператором def:
Листинг
import string
text = open(string.__file__[: — 1]).read()
start = 0
while 1:
found = text.find(«def ", start)
if found == -1:
break
print text[found:found + 60].split(«(")[0]
start = found + 1
Важным для преобразования текстовой информации является метод replace(), который рассматривается ниже: