Главная страница
Навигация по странице:

  • Низкоуровневый интерфейс модуля codecs

  • Метод Описание

  • EncodedFile( file , inputenc [, outputenc [, errors ]])

  • Константа Описание

  • Название кодировки Описание

  • Синтаксис шаблонов Ниже приводится список последовательностей специальных символов, ко- торые используются в шаблонах регулярных выражений:Символ(ы) Описание

  • Символ(ы) Описание

  • справочник по Python. мм isbn 9785932861578 9 785932 861578


    Скачать 4.21 Mb.
    Названиемм isbn 9785932861578 9 785932 861578
    Анкорсправочник по Python
    Дата08.05.2022
    Размер4.21 Mb.
    Формат файлаpdf
    Имя файлаBizli_Python-Podrobnyy-spravochnik.440222.pdf
    ТипСправочник
    #518195
    страница28 из 82
    1   ...   24   25   26   27   28   29   30   31   ...   82
    Глава
    16
    .
    Работа с текстом и строками
    В этой главе описываются модули Python, наиболее часто используемые для работы со строками и с текстом. В центре внимания этой главы будут наиболее типичные строковые операции, такие как обработка текста, сопо- ставление с шаблонами регулярных выражений и форматирование текста.
    Модуль codecs
    Модуль codecs используется для работы с различными кодировками сим- волов, применяемыми при вводе-выводе текста Юникода. Модуль позво- ляет определять новые кодировки символов и обеспечивает возможность обработки символьных данных с применением широкого спектра суще- ствующих кодировок, таких как UTF-8, UTF-16 и других. При разработке приложений намного более типично просто использовать существующие кодировки, поэтому именно эту тему мы и будем обсуждать здесь. Если вам потребуется создавать новые кодировки, за дополнительными подроб- ностями обращайтесь к электронной документации.
    Низкоуровневый интерфейс модуля codecs
    Каждой кодировке символов присвоено определенное имя, такое как ‘utf-8’ или ‘big5’. Следующая функция выполняет поиск кодировки.
    lookup(encoding)
    Отыскивает кодировку в реестре. В аргументе encoding передается строка, такая как ‘utf-8’. Если искомая кодировка в реестре отсутствует, возбуж- дается исключение LookupError. В противном случае возвращается экзем- пляр с класса CodecInfo.
    Экземпляр c класса CodecInfo обладает следующими методами:
    c.encode(s [, errors])
    Функция кодирования, которая кодирует строку s Юникода и возвращает кортеж (bytes, length_consumed). Элемент bytes – это строка 8-битных сим- это строка 8-битных сим- строка 8-битных сим- строка 8-битных сим-
    8-битных сим- битных сим- сим- сим-

    350
    Глава 16. Работа с текстом и строками волов, или массив байтов, содержащая кодированные данные. Элемент
    length_consumed
    – это число, отражающее количество символов в строке s, которые были кодированы. Необязательный аргумент errors определяет политику обработки ошибок кодирования и по умолчанию имеет значение
    ‘strict’
    c.decode(bytes [, errors])
    Функция кодирования, которая декодирует строку байтов bytes и возвра- и возвра- возвра- возвра- щает кортеж (s, length_consumed). Элемент s – это строка Юникода, а length_
    consumed
    – количество байтов в аргументе bytes, которые были декодирова- которые были декодирова- были декодирова- были декодирова- декодирова- декодирова- ны. Необязательный аргумент errors определяет политику обработки оши- бок кодирования и по умолчанию имеет значение ‘strict’.
    c.streamreader(bytestream [, errors])
    Возвращает экземпляр класса StreamReader, который используется для чтения декодированных данных. В аргументе bytestream передается объ- ект, поддерживающий интерфейс файлов, открытый в двоичном режиме.
    Необязательный аргумент errors определяет политику обработки ошибок кодирования и по умолчанию имеет значение ‘strict’. Экземпляр r клас- са StreamReader поддерживает следующие низкоуровневые операции ввода- вывода:
    Метод
    Описание
    r.read([size [, chars [, firstline]]])
    Возвращает последние chars символов декодированного текста. Аргумент size
    определяет максимальное число байтов, которые могут быть прочитаны из потока байтов, и используется для управления внутренним механизмом буферизации.
    В аргументе firstline
    передается флаг. Если он установлен, функция возвращает пер- вую строку текста, даже если далее в фай- ле возникли ошибки декодирования.
    r.readline([size [, keepends]])
    Возвращает одну строку декодированного текста. Флаг keepends определяет, должны ли сохраняться символы завершения стро- ки (по умолчанию имеет значение True
    ).
    r.readlines([size [, keepends]])
    Читает все строки в список.
    r.reset()
    Очищает внутренние буферы и информа- цию о состоянии объекта.
    c.streamwriter(bytestream [, errors])
    Возвращает экземпляр класса StreamWriter, который используется для за- писи кодированных данных. В аргументе bytestream передается объект, поддерживающий интерфейс файлов, открытый в двоичном режиме.
    Необязательный аргумент errors определяет политику обработки ошибок кодирования и по умолчанию имеет значение ‘strict’. Экземпляр w клас-

    Модуль codecs
    351
    са StreamWriter поддерживает следующие низкоуровневые операции ввода- вывода:
    Метод
    Описание
    w.write(s)
    Выводит кодированное представление строки s.
    w.writelines(lines)
    Выводит список строк lines в файл.
    w.reset()
    Очищает внутренние буферы и информацию о состоя- нии объекта.
    c.incrementalencoder([errors])
    Возвращает экземпляр класса IncrementalEncoder, который может исполь- зоваться для кодирования строк в несколько этапов. Необязательный ар- гумент errors по умолчанию имеет значение ‘strict’. Экземпляр e класса
    IncrementalEncoder обладает следующими методами:
    Метод
    Описание
    e.encode(s [,final])
    Возвращает кодированное представление строки s в виде строки байтов. Аргумент final должен устанав- ливаться в значение True в последнем вызове метода encode()
    e.reset()
    Очищает внутренние буферы и информацию о состоя- нии объекта.
    c.incrementaldecoder([errors])
    Возвращает экземпляр класса IncrementalDecoder, который может использо- ваться для декодирования строк байтов в несколько этапов. Необязатель- ный аргумент errors по умолчанию имеет значение ‘strict’. Экземпляр d класса IncrementalDecoder обладает следующими методами:
    Метод
    Описание
    d.decode(bytes [,final])
    Возвращает декодированную строку, представляющую последовательность кодированных байтов bytes.
    Аргумент final должен устанавливаться в значение
    True в последнем вызове метода decode().
    d.reset()
    Очищает внутренние буферы и информацию о состоя- нии объекта.
    Функции ввода-вывода
    Модуль codecs предоставляет коллекцию высокоуровневых функций, по- зволяющих упростить реализацию операций ввода-вывода кодированного текста. В большинстве случаев программисты предпочитают использовать эти функции вместо низкоуровневого интерфейса модуля codecs, описанно- го в первом разделе.

    352
    Глава 16. Работа с текстом и строками
    open(filename, mode[, encoding[, errors[, buffering]]])
    Открывает файл filename в режиме mode и обеспечивает прозрачное кодиро- вание/декодирование данных в соответствии с кодировкой, указанной в ар- гументе encoding. В аргументе errors передается одно из значений: ‘strict’,
    ‘ignore’
    , ‘replace’, ‘backslashreplace’ или ‘xmlcharrefreplace’. По умолчанию используется значение ‘strict’. Аргумент buffering имеет то же назначение, что и одноименный аргумент встроенной функции open(). Независимо от режима, указанного в аргументе mode, файл всегда открывается в двоич- ном режиме. В Python 3 вместо функции codecs.open() можно использовать встроенную функцию open().
    EncodedFile(file, inputenc[, outputenc [, errors]])
    Класс, представляющий собой обертку вокруг существующего объекта файла file, выполняющую кодирование. Перед записью в файл данные сначала интерпретируются в соответствии с кодировкой inputenc, а затем записываются в файл с использованием кодировки outputenc. Декодиро- вание данных, прочитанных из файла, выполняется в соответствии с ко- дировкой inputenc. Если аргумент outputenc опущен, он по умолчанию по- опущен, он по умолчанию по-
    , он по умолчанию по- он по умолчанию по- по умолчанию по- по умолчанию по- умолчанию по- умолчанию по- по- по- лучает значение inputenc. Аргумент errors имеет то же назначение, что и в функции open(), и по умолчанию имеет значение ‘strict’.
    iterencode(iterable, encoding [, errors])
    Функция-генератор, которая последовательно кодирует все строки в объ- екте iterable в соответствии с кодировкой encoding. Аргумент errors по умолчанию имеет значение ‘strict’.
    iterdecode(iterable, encoding [, errors])
    Функция-генератор, которая последовательно декодирует все строки бай- тов в объекте iterable в соответствии с кодировкой encoding. Аргумент er-
    rors
    по умолчанию имеет значение ‘strict’.
    Полезные константы
    Модуль codecs определяет следующие константы маркеров порядка следо- вания байтов, которые могут использоваться как вспомогательное сред- ство в интерпретации файлов, когда кодировка данных заранее не извест- на. Иногда эти маркеры записываются в начало файла, чтобы обозначить кодировку символов, и могут использоваться для выбора соответствующей кодировки.
    Константа
    Описание
    BOM
    Порядок следования байтов определяется аппаратной архитектурой (BOM_BE или BOM_LE)
    BOM_BE
    Маркер прямого (big-endian) порядка следования байтов
    (
    ‘\xfe\xff’
    )
    BOM_LE
    Маркер обратного (little-endian) порядка следования байтов (‘\xff\xfe’)
    BOM_UTF8
    Маркер кодировки UTF-8 (‘\xef\xbb\xbf’)

    Модуль codecs
    353
    Константа
    Описание
    BOM_UTF16_BE
    М
    аркер прямого (big-endian) порядка следования байтов в 16-битовой кодировке UTF-16 (‘\xfe\xff’)
    BOM_UTF16_LE
    Маркер обратного (little-endian) порядка следования байтов в 16-битовой кодировке UTF-16 (‘\xfe\xff’)
    BOM_UTF32_BE
    Маркер прямого (big-endian) порядка следования байтов в 32-битовой кодировке UTF-32 (‘\x00\x00\xfe\xff’)
    BOM_UTF32_LE
    Маркер обратного (little-endian) порядка следования бай- little-endian) порядка следования бай-
    -endian) порядка следования бай- endian) порядка следования бай-
    ) порядка следования бай- тов в 32-битовой кодировке UTF-32 (‘\xff\xfe\x00\x00’)
    Стандартные кодировки
    Ниже приводится список некоторых из наиболее часто используемых ко- дировок символов. Имена кодировок приводятся в том виде, в каком они передаются функциям, таким как open() или lookup(). Полный список мож- но найти в электронной документации с описанием модуля codecs (http://
    docs.python.org/library/codecs
    ).
    Название кодировки
    Описание
    ascii
    7-битная кодировка ASCII
    cp437
    Расширенный набор символов ASCII из MS-DOS
    cp1252
    Расширенный набор символов ASCII из Windows latin-1, iso-8859-1
    Набор ASCII, дополненный символами из набора Latin utf-16
    UTF-16
    utf-16-be
    UTF-16 с прямым порядком следования байтов utf-16-le
    UTF-16 с обратным порядком следования байтов utf-32
    UTF-32
    utf-32-be
    UTF-32 с прямым порядком следования байтов utf-32-le
    UTF-32 с обратным порядком следования байтов utf-8
    UTF-8
    Примечания
    • Дополнительные сведения об использовании модуля codecs приводятся в главе 9 «Ввод и вывод».
    • Информацию о том, как создавать новые кодировки символов, можно найти в электронной документации.
    • Особое внимание требуется уделять входным аргументам операций en- code()
    и decode(). Всем операциям encode() должны передаваться строки
    Юникода, а всем операциям decode() – строки байтов. В Python 2 это требование соблюдается не так строго, но в Python 3 различия между типами строк имеют существенное значение. Например, в Python 2 име-
    Python 2 име-
    2 име-

    354
    Глава 16. Работа с текстом и строками ются кодировки, которые отображают строки байтов в строки байтов
    (например, кодировка «bz2»). Они недоступны в Python 3 и потому не должны использоваться, если вы учитываете задачу совместимости.
    Модуль re
    Модуль re используется для выполнения операций сопоставления с шаб- лонами регулярных выражений и замены фрагментов строк. Модуль под- держивает операции как со строками Юникода, так и со строками байтов.
    Шаблоны регулярных выражений определяются как строки, состоящие из смеси текста и последовательностей специальных символов. В шаблонах часто используются специальные символы и символ обратного слэша, по- этому они обычно оформляются, как «сырые» строки, такие как r’(?P\
    d+)\.(\d*)’
    . В оставшейся части этого раздела все шаблоны регулярных вы- ражений будут записываться с использованием синтаксиса «сырых» строк.
    Синтаксис шаблонов
    Ниже приводится список последовательностей специальных символов, ко- торые используются в шаблонах регулярных выражений:
    Символ(ы)
    Описание
    text
    Соответствует строке text.
    Соответствует любому символу, кроме символа перевода строки.
    ^
    Соответствует позиции начала строки.
    $
    Соответствует позиции конца строки.
    *
    Ноль или более повторений предшествующего выражения; соответствует максимально возможному числу повторений.
    +
    Одно или более повторений предшествующего выражения; соответствует максимально возможному числу повторений.
    ?
    Ноль или одно повторение предшествующего выражения.
    *?
    Ноль или более повторений предшествующего выражения; соответствует минимально возможному числу повторений.
    +?
    Одно или более повторений предшествующего выражения; соответствует минимально возможному числу повторений.
    ??
    Ноль или одно повторение предшествующего выражения; соответствует минимально возможному числу повторений.
    {m}
    Соответствует точно m повторениям предшествующего вы- ражения.
    {m, n}
    Соответствует от m до n повторений предшествующего выра- жения. Если аргумент m опущен, он принимается равным
    0
    . Если аргумент n опущен, он принимается равным бес- бес- бес- конечности.

    Модуль re
    355
    Символ(ы)
    Описание
    {m, n}?
    От m до n повторений предшествующего выражения; соот- ветствует минимально возможному числу повторений.
    [...]
    Соответствует любому символу, присутствующему в мно- жестве, таком как r’[abcdef]’ или r’[a-zA-z]’. Специальные символы, такие как *, утрачивают свое специальное значе- ние внутри множества.
    [^...]
    Соответствует любому символу, не присутствующему в множестве, таком как r’[^0-9]’.
    A|B
    Соответствует либо A, либо B, где A и B являются регулярны- ми выражениями.
    (...)
    Подстрока, соответствующая регулярному выражению в круглых скобках, интерпретируется как группа и сохра- няется. Содержимое группы может быть получено с помо- щью метода group() объектов класса
    MatchObject
    , которые возвращаются операцией поиска совпадений.
    (?aiLmsux)
    Символы “a”, “i”, “L”, “m”, “s”, “u” и “x” интерпретируются как флаги, соответствующие флагам re.A, re.I, re.L, re.M, re.S
    , re.U, re.X, которые передаются методу re.compile()
    Флаг “a” доступен только в Python 3.
    (?:...)
    Соответствует регулярному выражению в круглых скоб- ках, но совпавшая подстрока не сохраняется.
    (?P<
    name>...)
    Подстрока, соответствующая регулярному выражению в круглых скобках, интерпретируется как именованная группа с именем name. Имя группы должно быть допусти- мым идентификатором Python.
    (?P=
    name...)
    Соответствует тому тексту, который ранее уже совпал с именованной группой name.
    (?#...)
    Комментарий. Содержимое в круглых скобках игнориру- ется.
    (?=...)
    Соответствует предшествующему выражению, только если вслед за ним обнаруживается совпадение с шабло- ном в круг лых скобках. Например, выражение r’Hello
    (?=World)’
    совпадет с подстрокой ‘Hello ‘, только если за ней будет следовать подстрока ‘World’.
    (?!...)
    Соответствует предшествующему выражению, только если вслед за ним отсутствует совпадение с шаблоном в круглых скобках. Например, выражение r’Hello (?!World)’ совпадет с подстрокой ‘Hello ‘ , только если за ней не будет следо- вать подстрока ‘World’.
    (?<=...)
    Соответствует следующему выражению, только если перед ним обнаруживается совпадение с шаблоном в круглых скобках. Например, выражение r’(?<=abc)def’ совпадет с подстрокой ‘def’, только если ей будет предшествовать подстрока ‘abc’.

    356
    Глава 16. Работа с текстом и строками
    Символ(ы)
    Описание
    (?
    Соответствует следующему выражению, только если перед ним отсутствует совпадение с шаблоном в круглых скоб- ках. Например, выражение r’(? строкой ‘def’, только если ей не будет предшествовать под- строка ‘abc’.
    (?(
    id|name)ypat|npat)
    Проверяет, существует ли группа регулярного выражения с числовым идентификатором id или с именем name. Если такая группа существует, определяется соответствие регу- лярному выражению ypat. В противном случае определяет- ся соответствие необязательному регулярному выражению
    npat
    . Например, выражение r’(Hello)?(?(1) World|Howdy)’ сов- падет со строкой ‘Hello World’ или со строкой ‘Howdy’.
    Стандартные экранированные последовательности, такие как ‘\n’ и ‘\t’, точно так же интерпретируются и в регулярных выражениях (например, выражению r’\n+’ будет соответствовать один или более символов перевода строки). Кроме того, литералы символов, которые в регулярных выраже- ниях имеют специальное значение, можно указывать, предваряя их симво- лом обратного слэша. Например, выражению r’\*’ соответствует символ *.
    Дополнительно ряд экранированных последовательностей, начинающих- ся символом обратного слэша, соответствуют специальным символам:
    Символ(ы)
    Описание
    \
    число
    Соответствует фрагменту текста, совпавшему с группой с указанным номером. Группы нумеруются от 1 до 99, слева направо.
    \A
    Соответствует только началу строки.
    \b
    Соответствует пустой строке в позиции начала или конца слова. Под словом подразумевается последовательность алфавитно-цифровых символов, завершающаяся пробель- ным или любым другим не алфавитно-цифровым символом.
    \B
    Соответствует пустой строке не в позиции начала или кон- ца слова.
    \d
    Соответствует любой десятичной цифре. То же, что и вы- ражение r’[0-9]’.
    \D
    Соответствует любому нецифровому символу. То же, что и выражение r’[^0-9]’.
    \s
    Соответствует любому пробельному символу. То же, что и выражение r’[\t\n\r\f\v]’.
    \S
    Соответствует любому непробельному символу. То же, что и выражение r’[^\t\n\r\f\v]’.
    \w
    Соответствует любому алфавитно-цифровому символу.
    (продолжение)

    Модуль re
    1   ...   24   25   26   27   28   29   30   31   ...   82


    написать администратору сайта