KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Роман Сузи - Язык программирования Python

Роман Сузи - Язык программирования Python

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Роман Сузи, "Язык программирования Python" бесплатно, без регистрации.
Перейти на страницу:

Следует отметить, что для Python созданы также модули для работы с естественными языками, а также для лингвистических исследований. Хорошим учебным примером может служить nltk (the Natural Language Toolkit).

Стоит отметить проект PyParsing (сайт:http://pyparsing.sourceforge.net), с помощью которого можно организовать обработку текста по заданной грамматике.

Строки

Строки в языке Python являются типом данных, специально предназначенным для обработки текстовой информации. Строка может содержать произвольно длинный текст (ограниченный имеющейся памятью).

В новых версиях Python имеются два типа строк: обычные строки (последовательность байтов) и Unicode–строки (последовательность символов). В Unicode–строке каждый символ может занимать в памяти 2 или 4 байта, в зависимости от настроек периода компиляции. Четырехбайтовые знаки используются в основном для восточных языков.

Примечание:

В языке и стандартной библиотеке за некоторыми исключениями строки и Unicode–строки взаимозаменяемы, в собственных приложениях для совместимости с обоими видами строк следует избегать проверок на тип. Если это необходимо, можно проверять принадлежность базовому (для строк и Unicode–строк) типу с помощью isinstance(s, basestring). 

При использовании Unicode–строк, следует мысленно принять точку зрения, относительно которой именно Unicode–представление является главным, а все остальные кодировки — лишь частные случаи представления текста, которые не могут передать всех символов. Без такой установки будет непонятно, почему преобразование из восьмибитной кодировки называется decode (декодирование). Для внешнего представления можно с успехом использовать кодировку UTF–8, хотя, конечно, это зависит от решаемых задач.

Кодировка Python–программы

Для того чтобы Unicode–литералы в Python–программе воспринимались интерпретатором правильно, необходимо указать кодировку в начале программы, записав в первой или второй строке примерно следующее (для Unix/Linux):

# -*- coding: koi8–r -*-

или (под Windows):

# -*- coding: cp1251 -*-

Могут быть и другие варианты:

# -*- coding: latin–1 -*-

# -*- coding: utf–8 -*-

# -*- coding: mac–cyrillic -*-

# -*- coding: iso8859–5 -*-

Полный перечень кодировок (и их псевдонимов):

>>> import encodings.aliases

>>> print encodings.aliases.aliases

{'iso_ir_6': 'ascii', 'maccyrillic': 'mac_cyrillic',

'iso_celtic': 'iso8859_14', 'ebcdic_cp_wt': 'cp037',

'ibm500': 'cp500', ...

Если кодировка не указана, то считается, что используется us–ascii. При этом интерпретатор Python будет выдавать предупреждения при запуске модуля:

sys:1: DeprecationWarning: Non–ASCII character 'xf0' in file example.py

on line 2, but no encoding declared;

see http://www.python.org/peps/pep–0263.html for details

Строковые литералы

Строки можно задать в программе с помощью строковых литералов. Литералы записываются с использованием апострофов ', кавычек " или этих же символов, взятых трижды. Внутри литералов обратная косая черта имеет специальное значение. Она служит для ввода специальных символов и для указания символов через коды. Если перед строковым литералом поставлено r, обратная косая черта не имеет специального значения (r от английского слова raw, строка задается «как есть»). Unicode–литералы задаются с префиксом u. Вот несколько примеров:

s1 = "строка 1"

s2 = r'12'

s3 = """applentree""" # n — символ перевода строки

s4 = """apple

tree""" # строка в утроенных кавычках может иметь внутри переводы строк

s5 = 'x7365'

u1 = u"Unicode literal"

u2 = u'u0410u0434u0440u0435u0441'

Примечание:

Обратная косая черта не должна быть последним символом в литерале, то есть, "str" вызовет синтаксическую ошибку. 

Указание кодировки позволяет применять в Unicode–литералах указанную в начале программы кодировку. Если кодировка не указана, можно пользоваться только кодами символов, заданными через обратную косую черту.

Операции над строками

К операциям над строками, которые имеют специальную синтаксическую поддержку в языке, относятся, в частности конкатенация (склеивание) строк, повторение строки, форматирование:

>>> print "A" + "B", "A"*5, "%s" % "A"

AB AAAAA A

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

>>> print "%i" % 234

234

>>> print "%i %s %3.2f" % (5, "ABC", 23.45678)

5 ABC 23.46

>>> a = 123

>>> b = [1, 2, 3]

>>> print "%(a)i: %(b)s" % vars()

123: [1, 2, 3]

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

В строке формата кроме текста могут употребляться спецификации, регламентирующие формат выводимого значения. Спецификация имеет синтаксис

"%" [ключ][флаг*][шир][.точность][длина_типа]спецификатор

ключ: "(" символ за исключением круглых скобок* ")"

флаг: "+" | "-" | пробел | "#" | "0"

шир: ("1" ... "9")("0" ... "9")* | "*"

точность: ("1" ... "9")* | "*"

длина_типа: "a" ... "z" | "A" ... "Z"

спецификатор: "a" ... "z" | "A" ... "Z" | "%"

Где символы обозначают следующее:

ключ

Ключ из словаря.

флаги

Дополнительные свойства преобразования.

шир

Минимальная ширина поля.

точность

Точность (для чисел с плавающей запятой).

длина_типа

Модификатор типа.

спецификатор

Тип представления выводимого объекта.

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

Символ Где применяется Что указывает 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.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*