Саммерфилд - Программирование на Python 3 (1077331), страница 77
Текст из файла (страница 77)
255) в объект Ьа ти- па Ьутеаггау ьа.зррепо(!) Возвращает копию объекта Ь типа Ьутев или Ьу1еа ггау, с пер- вым символом в верхнем регистре (если это символ АЯСН) Ь.сар!та1!ге() Возвращает копию объекта Ь, отцентрированную в поле ши- риной н!Втп. Недостающие символы по умолчанию заполня- ются пробелами или символами, в соответствии с необяза- тельным аргументом Ьуте ь.септег(н!Ьть, Ьуте) Возвращает число вхождений объекта х типа Ьутев или Ьуте- аггау, в объект Ь типа Ьутев или Ьутеаггау (или в срез Ь(птагт:епа]) Ь соьпт (х, згагг, епа) Возвращает объект типа зтг, представляюКодировхи щий результат декодирования байтов с использованием кодировки [)ТР-8 или коли' стр.112 розки, определяемой аргументом епооо[пд, с обработкой ошибок, определяемой необязательным аргументом егг Ь.оесосе (епсошпд, еггог) Возвращает тгое, если ь (или срез ь(птагт: епа]) оканчивает- ся содержимым объекта х тина ьутев или ьутеаггау или лю- бым из объектов типа Ьутез или Ьутеаггау в кортеже х; в противном случае возвращает Рз1зе Ь,еповнттп (х, птпгт, епо) Возвращает копию объекта Ь, в котором символы табуля- ции замещены пробелами с шагом 8 или в соответствии со значением необязательного аргумента з тле ь.ехрапстаьз (юге) ьа.ехтепо(зеч) Возвращает позицию самого первого (крайнего слева) вхождения объекта х типа ьутев/ьутеаггау в объект ь (или в срез ь( п та гс: епо]); если объект х не найден, возвращается -1.
Для поиска самого последнего (крайнего справа) вхождения следует использовать метод гттпс() Ь.у!по (х, зтагт, епа) Возвращает объект типа Ьутез, который содержит байты, со- ответствующие шестнадцатеричным значениям в строке Ь Ь.тгоапех(Ь) Возвращает позицию самого первого (крайнего слева) вхождения объекта х в объект ь (или в срез строки ь(зтпгт: епо])1 если объект х не найден, возбуждается исключение Уа1оеЕггог. Для поиска самого последнего (крайнего справа) вхождения следует использовать метод гтппех() Ь, шоех (х, зтагт, епа) Вставляет целое число ! (в диапазоне 0...255) в позицию р в объекте Ьа ьа тпвегт(р, !) Дополняет объект Ьа типа Ьутеаггау целыми числами из по- следовательности зес.
Все целые числа должны находиться в диапазоне 0...255 Глава 7. Работа с файлами 34б Таблица 7.3 /продолжение) Синтаксис Описание Возвращает Тгие, если объект Ь типа Ьутев/Ьутеаггау не пустой и содержит только алфавитно-цифровые символы АЯСП Ь. 1ва!ппв() Возвращает тгсе, если объект ь типа ьутев/ьутеаггау не пус- той и содержит только алфавитные символы АЯСП Ь. 1ва1рпа() Возвращает Тгие, если объект Ь типа Ьутев/Ьутеаг гау не пус- той и содержит только цифровые символы АЯСП ь.!вс!р!т() Возвращает Тгсе, если объект Ь типа Ьутев/Ьутеаггау содер- жит хотя бы один символ АЯСП, который может быть пред- ставлен в нижнем регистре, и все такие символы находятся в нижнем регистре Ь.тв1свег() Возвращает Тгсе, если объект Ь типа Ьутев/Ьутеаггау не пустой и содержит только пробельные символы из набора АЯСП Ь.!вврасе() Возвращает Тгсе, если объект Ь не пустой и имеет формат за- головка ь.твты1е() Возвращает Тгсе, если объект ь типа ьутев/ьутеаггау содер- жит хотя бы один символ АЯСП, который может быть пред- ставлен в верхнем регистре, и все такие символы находятся в верхнем регистре Ь !виррег() Объединяет все элементы типа ьутев/ьутеаггву в последова- тельности вес, вставляя между ними объект Ь (который мо- жет быть пустым) Ь.)с!п(вес) Возвращает копию объекта Ь типа Ьутев/Ьутез г гау выровнен.
ной по левому краю в поле шириной в!Стп. Недостающие символы по умолчанию заполняются пробелами или символами, в соответствии с необязательным аргументом ауте. Для выравнивания по правому краю используйте метод г)пвт() Ь. 1) свт (ю!стп, Ьуте) Возвращает копию объекта Ь типа Ьутев/Ьутеаггау, в кото- ром все символы АЯСП приведены к нижнему регистру Ь 1свег() Ь.
рагттттсп(вер) Удаляет и возвращает целое число, находящееся в объекте Ьа в позиции р Ьа.рор(р) Удаляет первое вхождение целого числа ! из объекта Ьа ти- па Ьутеаггау Ьа гевсуе(1) Возвращает кортеж с тремя объектами типа Ьутев: часть Ь перед самым первым вхождением содержимого объекта вер, сам объект вер и часть Ь после самого первого вхождения содержимого объекта вер.
Если содержимое объекта вер не будет найдено, возвращается объект Ь и два пустых объекта Ьутев. Для деления объекта Ь по самому правому вхождению содержимого объекта вер используйте метод грег(11!оп() Запись и чтение двоичных данных 347 Синтаксис Ь.гер1асе (х, у, п) Ьа.гечегзе() Ь.вр1сс(», с) ь, зр1111спез( г) Ь,зСагСзнсть (х зсагс, об) ь.зсыр(») Ь.внарсззе() Ь.СТС1е() Ь.сгапз1асе (Ы, б) Ь.сррег() Ь. 7(111(н) Описание Возвращает копию объекта Ь, в котором каждое (но не более и, если этот аргумент определен) вхождение объекта х типа Ьутев/Ьутеа ггау замещается объектом у Переставляет в памяти элементы объекта Ьа типа Ьутеаггау в обратном порядке Возвращает список объектов типа Ьутез, выполняя разбиение объекта Ь не более чем и раз по содержимому объекта х Если число и не задано, разбиение выполняется по всем най денным вхождениям объекта х.
Если объект х не задан, рабиение выполняется по пробельным символам. Для выпол. пения разбиения строки, начиная с правого края, используйте метод гзр1! с. Возвращает список строк, выполняя разбиение объекта ь по символам перевода строки, удаляя их, если в аргументе Г не задано значение Т гас Возвращает тгзе, если объект ь типа ьусез/ьусеаггау (или срез ь(зсагс:епб]) начинается содержимым объекта х типа ЬуСез/Ьутеаггау или содержимым любого объекта х типа ьусез/ьусеаггау, если х — это кортеж; в противном случае возвращает Га1зе Возвращает копию объекта Ь, из которого удалены начальные и завершающие пробельные символы (или байты, вхо. дящие в объект х типа ьусез/ьусеаггау).
метод 1всгср() выполняет удаление только начальных символов (или байтов), а метод гзс г1р() — конечных Возвращает копию объекта Ь, в котором все символы АБСП верхнего регистра преобразованы в символы нижнего регистра, а все символы АБСП нижнего регистра — в символы верхнего регистра Возвращает копию объекта Ь, в котором первые символы АБСП каждого слова преобразованы в символы верхнего регистра, а все остальные символы АБСП вЂ” в символы нижнего регистра Возвращает копию объекта Ь, из которой удаляются все байты, входящие в объект б„а все остальные байты замещаются байтами из объекта Ьс, причем индекс байта в объекте И определяется значением байта в объекте Ь Возвращает копию объекта Ь типа Ьутез/Ьутеаггау, в кото- ром все символы АБСП приведены к верхнему регистру Возвращает копию объекта Ь, который, если его длина меньше величины н, дополняется слева символами нуля (байт 0»30) до длины н 348 Глава 7.
Работа с файлами Неформатированные двоичные данные с возможным сжатием Написание собственного программного кода для работы с двоичными данными обеспечивает нам полный контроль над форматом файла. Кроме того, такой подход является более безопасным, чем использование модуля р!сК1е, поскольку злонамеренные, недопустимые данные будут обрабатываться нашим программным кодом, а не интерпретатором. Разрабатывая собственные двоичные форматы файлов, совсем нелишним будет предусмотреть сигнатуру для идентификации типа файла и номер версии для идентификации версии используемого формата. Ниже приводятся определения, используемые в программе сслоегьт сЫелта.ру: ИА010 = Ь"А19~х00" ЕОПИАТ УЕВВ10И = Ь"'тхООтх01" Мы использовали четыре байта для сигнатуры и два байта для обозначения версии. Порядок следования байтов в машинном слове не имеет значения, потому что будут записываться отдельные байты, а не целые числа в байтовом представлении, то есть последовательность байтов будет одна и та же на любой аппаратной архитектуре.
Для записи и чтения двоичных данных вручную нам необходимо некоторое средство преобразования объектов Ру!)топ в соответствующее двоичное представление и средство преобразования двоичных данных в объекты Ру!)топ. Большая часть необходимых нам функциональных возможностей предоставляется модулем в!гцст, краткое описание которого приводится во врезке «Модуль вФгисФ» (стр. 349), и типами данных Ьутвв и Ьутеаггау, краткое описание которых приводится во врезке «Типы данных (ту!ее и ЬУСеаггау» (стр.
344). К сожалению, модуль атгцст может обрабатывать строки только определенной длины, тогда как в нашем случае идентификаторы отчетов, названия аэропортов, типы самолетов и текст комментариев могут быть представлены строками переменной длины. Чтобы удовлетворить требования модуля атгцст, мы создали функцию расК зтг!пр( ), которая принимает строку и возвращает объект Ьутез, состоящий из двух компонентов: первый — это целое число, определяющее длину строки, и второй — последовательность байтов в кодировке СТР-3, представляющих текст строки.
а Так как функция расК атгшр() будет вызываться только Локальные функции, внутри функции ехрогт Ьтпагу(), мы поместили опредестр.409 ление расК зтг!пр() внутрь функции ехрогт Ь!лагу(). Это означает, что функция расК зтгтпр() будет недоступна за пределами функции ехрогт Ьтпагу(), и указывает, что это всего лишь локальная, вспомогательная функция. Ниже 349 Запись и чтение двоичных данных бег ехрогс шпагу(зе!т, гс!епаве, совргезп=па!эе): бес раск зсгспд(асс!од): баса = зсг!пд.епсобе("ос!8") гогвас = "<н(О)з",го<вас(!еп(баса)) гесогп зсгосс.раск(гогвас.
!еп(баса), баса) Метод зтг,епсобе() возвращает объект Ьутез со строкой, закодированной в соответствии с указанной кодировкой. Кодировка 1)ТУ-8 является очень удобной, потому что она может представить любой символ Юникода и обеспечивает компактное представление символов АЯС11 (по одному байту на символ). В переменной (огвас сохраняется формат представления строки с длиной.
Например, пусть имеется строка ксп.тт!)<!рс<(!а.огяк, тогда ее форматом будет строка "<Н169" (обратный порядок следования байтов, 2-байтовое целое число без знака, 16-байтовая строка), а получившийся объект Ьусез будет иметь вид: Ь''<х10!хООеп.н!Ксребса, огд'. Для удобства интерпретатор РуС)гоп отображает объекты типа Ьутез в компактной форме, используя печатаемые символы АЯС11, если это возможно, и экранированные шестнадцатеричные значения (и некоторые специальные экранированные последовательности, такие как !С и т,п) в противном случае. о Кодировки сиивопов, стр. 112 МОДУЛЬ91ГиС1 модуль э!гост предоставляет функции зсгосс.раск(), зсгисс.опраск() и ряд других функций, а также класс э!гипс.9сгосс(). Функция зС госС. расК() принимает строку формата и одно или более значений и возвращает объект Ьутез, хранящий значения, представленные в соответствии с указанным форматом.
Функция зС гост. опрасК() принимает формат и объект Ьутеэ или Ьутеа- гга и возвращает кортеж значений, ранее упакованных с использованием строки формата, Например: баса = зсгбсс.раск("<2п", 11, -9) к баса == ь'Кхсь|<ООКхт7!хгт' !сева = зсгбсс.опраск("<2п", баса) к стева == (11, -9) Строка формата состоит из одного или более символов.