Главная » Просмотр файлов » Саммерфилд - Программирование на Python 3

Саммерфилд - Программирование на Python 3 (1077331), страница 79

Файл №1077331 Саммерфилд - Программирование на Python 3 (Саммерфилд - Программирование на Python 3) 79 страницаСаммерфилд - Программирование на Python 3 (1077331) страница 792018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 79)

Сначала выполняется попытка получить идентификатор отчета. Если в результате было получено значение йспе, это означает, что достигнут конец файла и можно прервать цикл. В противном случае создается словарь ба1а, в котором будут храниться сведения об одном инциденте, и предпринимается попытка получить остальные данные. Для извлечения строк используется метод ьпрасК а1гтпр(), а извлечение остальных данных производится одной операцией чтения структуры ИавЬе га- 811001. Так как дата хранится в файле в виде целого числа, необходимо выполнить обратное его преобразование, чтобы получить дату в нормальном виде. Но для получения остальных данных достаточно всего лишь выполнить их распаковывание — здесь не требуется выполнять проверку или какие-либо преобразования, потому что выполняется попытка получить данные тех же типов, что были записаны, с использованием формата, хранящегося в структуре йбвпе гз81гьс1.

В случае возникновения каких-либо ошибок, например, при распаковывании всех чисел, будет возбуждено исключение, которое будет обработано блоком ехсерт. (Мы не приводим здесь блоки ехсер1 и Т!па11у, потому что они имеют ту же структуру, что и в методе !прог! ртсК1е( ), приводившемся в предыдущем подразделе.) Ближе к концу мы, применяя подходящий синтаксис Распаховывараспаковывания отображения, создаем объект типа 1п пав бщбрпве. стбеп1, после чего объект сохраняется в словаре с инфор- нвй, стр.211 мацией обо всех инцидентах.

Если не принимать во внимание необходимость обработки строк переменной длины, модуль 81гьс1 существенно упрощает сохранение и загрузку данных в двоичном формате. А продемонстрированные здесь методы раск зтг!пр() и ипраск зтг!00(), предназначенные для работы со строками переменной длины, прекрасно подходят для большинства ситуаций. Збб Глава 7.

Работа с файлами Запись и синтаксический анализ текстовых файлов Запись текста выполняется очень просто, но обратное его чтение может быть весьма проблематичным, поэтому следует очень тщательно разрабатывать структуру текста, чтобы впоследствии анализировать его было не так сложно. На рис. 7.2 показан пример записи с информацией об авиационном инциденте в текстовом формате, который мы предполагаем использовать. При записи отчетов об инцидентах в файл за каждым из них будет записываться одна пустая строка, но при анализе файла будем считать допустимыми ноль или более пустых строк между отчетами.

[200709270220096] Опте=2007-09-27 атгсгатт 1о=тб758 атгсгегт туре=онс-2-мкт а!грег!=МЕН[Е К [МОРНО[Е) ЯМ1ТН рт1от регсепт посте оп туре=48.)53846)838 рт1от тота1 Норге=13000 вжат г=О .МАННАТТНЕ ВТАНТ. АСС0801МО ТО ТНЕ Р1[ОТ, ТНЕ ОНАО [1МК РА!ЕЕР ОРЕ ТО АМ ОУЕН312ЕО ТА1! ИНЕЕ! ТТНЕ ЕАМ01М6 ОМ НАЯР 30ЯРАСЕ.

.МАННАТ1УЕ ЕМО. Рис. 7.2. Пример заноси с информацией ее авиационном инциденте в текстовом формате Запись текста Каждая запись с информацией об инциденте начинается с идентификатора отчета, заключенного в квадратные скобки (()). Далее следуют все однострочные элементы данных, в форме ключ=значение, Многострочный текст комментария начинается с маркера начала (.

ИАННАТ1- УЕ ЗТАНТ. ) и заканчивается маркером конца (. ИАННАТ1ЧЕ ЕИР.), а чтобы гарантировать, что никакая строка комментария не будет перепутана с начальным или конечным маркером, текст между ними оформляется с отступами. Ниже приводится программный код функции ехрогт техт(), за исключением блоков ехсер! и 11паПу, поскольку они остались теми же, что и прежде, кроме обрабатываемых исключений: Запись и синтаксический анализ текстовых файлов 357 сет ехригс секс(вест, (1)епаве): игаррег = сехсигар.техсигаррег(1псс1а1 1ппепс=" внавеинепс спаепс=" ") сп = кипе сгу тп = преп(тс1епаве, "ы".

епсосспс="иста") тпг спсспепс сп ве1т.ча1иев(): паггатсче = "Сп".)псп(вгаррег.вгар( спстаепс.паггас1че.всг10())) тп.вгссе("((О.геригс 10)!Ап" "с)асе=(О,пасе' вцп" "асгсгатт Ш=(О.асгсгатт са)1п" "а1гсгатс суре=(О.асгигатс суре)1п" "а1грогс=(а1григс)Сп" "рс1от регсепт лонга оп Суре=" "(О рс1ос регсепс лонга оп суре)1п" "р11ос соса1 панга=(О,р11пс спса1 ппнгв)1п" "вссасг=(О.в10асг.п)сп" ".ВАЯЯАТ1ЧЕ ЕТАЯТ.1п(паггас1че)Сп" т.аАЯЯАТ1ЧЕ Едо.'сп1п".Ссгват(спссаепс, асгрсгс=1пс1сепс.асгрпгсипг!р(), паггас1че=паггассче)) геснгп Тгие Символы перевода строки в тексте комментария не имеют большого значения, потому что мы можем ограничить ширину текста по своему усмотрению.

Для этого можно было бы использовать функцию сехсвгар. итар() из модуля сехСигар, однако нам требуется не просто обернуть текст, но и добавить отступы, поэтому в самом начале метода создается объект Сехсигар. Тахту(гар, инициализированный отступами желаемой для нас ширины (по четыре пробела для первой и последующих строк). По умолчанию объект ограничивает ширину текста 70 символами в строке, но эту величину можно изменить, передав еще один именованный аргумент. Мы могли бы записать этот текст как строку в тройных Модуль кавычках, но мы предпочли вручную вставлять символы сасессве перевода строки. Объект Сехсигар. Техт)(гар предоставляет стр. 253 метод игар(), который принимает строку, в данном случае — текст комментария, и возвращает список строк с отступами, каждая из которых не длиннее заданной ширины текста.

Затем строки из списка объединяются в еди- НУЮ СТРОКУ, С ИСПОЛЬЗОВаНИЕМ СИМВОЛа ПЕРЕВОДа СТРОКИ стр, 100 в качестве разделителя. Дата инцидента хранится в объекте СаСет1ве. Оасе. При записи даты методу всг. Ссгвас() предписывается использовать строковое представление даты, в результате чего он воспроизводит строку с датой Метой тогв формате с'"с"с'У-ММ-1)П, в соответствии со стандартом стр.

290 130 8601. При записи признака всзасг, который имеет 358 Глава 7. Работа с файлами тип Ьоо1, методу а! г. гогааг() предписывается представить его как целое число, что в результате дает 1 — для Тгое и Π— для Ра18е. Вообще, использование метода а! г. гогааг() существенно упрощает запись текста, потому что он способен автоматически обрабатывать все типы данных языка Руг)гоп (включая нестандартные, при условии, что они реализуют специальныеметоды агг () и Еогваг ()). Синтаксический анализ текста Метод чтения и синтаксического анализа записей с информацией об авиационных инцидентах в текстовом формате — более сложный и более длинный по сравнению с методом записи. При чтении данных из файла метод может пребывать в одном из нескольких состояний.

Метод может находиться в середине процедуры чтения строк комментария; он может читать строку ключ=значение или читать строку с идентификатором отчета в начале новой записи с информацией об инциденте. Мы рассмотрим метод 1врогг гехт аапоа1(), разбив его на пять фрагментов. бег !прог! гехт аапоа1(ае1г, гт1епаае): ГП = Мопе ггу: гп = ореп(гг1епаае, епооб1по="огга") ае1(.о1еаг() бага = () паггагтне = Иопе Работа начинается с того, что файл открывается для чтения в текстовом режиме. Затем производится очистка словаря с инцидентами и создается словарь бага для хранения данных об одном инциденте— так же, как это делалось, когда мы выполняли чтение записей с информацией об инцидентах в двоичном формате.

Переменная паггаггне имеет два назначения: она используется как индикатор состояния и одновременно для хранения текста комментария для текущего инцидента. Если переменная паг гаг!не имеет значение Иоле, это означает, что в настоящий момент не выполняется чтение комментария, но если она содержит строку (пусть даже пустую), это означает, что выполняется чтение строк комментария. гог 1!по, 1!пе !и еповегаге( пь агагг=т): 1!пе = 1!пе.гагг!р() тт пог 1тпе апб паггаг!не га Мопе'.

сопг!пое !Г паггаг!не 1а пот иоле: !Г 1тпЕ == ".ИАННАТ1ЧЕ ЕМО.": бага["паггаггне") = тех!агар,бебепг( паггаг!не),агг1р() 1г 1еп(бага) != ел гатае 1погбепгЕггог("в!ее!по бага оп " "1гпе (О)", гогваг( 1!по)) гпо1бепг = ?по!сепг(*.бата) Запись и синтаксический анализ текстовых файлов ве)Г[спссбепт. герогС тб] = спо1беы баса = () паггассче = попе е1ве: паггассче »= 1спе + "сп" Поскольку строки читаются по отдельности, имеется возможность следить за номером текущей строки и использовать его для вывода более информативных сообщений об ошибках, чем это возможно при чтении файлов с данными в двоичном формате. Сначала из прочитанной строки удаляются начальные и завершающие пробельные символы, и если в результате получилась пустая строка (и при этом метод не находится в процессе чтения строк комментария), то просто выполняется переход к следующей строке.

Тем самым мы обеспечиваем допустимость произвольного числа пустых строк между записями об инцидентах и сохраняем пустые строки в тексте комментария. Если переменная паггассче не равна Иоле, следовательно, выполняется чтение текста комментария. Если прочитанная строка является маркером конца комментария, зто означает, что закончено чтение не только комментария, но и всех данных о текущем инциденте. В этом случае текст комментария помещается в словарь бата (с удалением отступов вызовом функции Сехтигар.

бебепС()) и, если словарь содержит все девять элементов данных, создается новый объект ]пссбепт, который затем сохраняется в словаре. После этого выполняется подготовка к приему новой записи: словарь бата очищается, и переменной паггассче присваивается исходное значение. С другой стороны, если строка не является маркером конца комментария, она добавляется в конец содержимого переменной паггатсче, включая символ перевода строки, который был удален в самом начале цикла. е119 (поС бата апб 1спе[0] == "[" апб 1спе[-1] == "]"): баса["герогс сб"] = 11пе[1:-1] Если переменная паггатсче содержит значение 9(опе, следовательно, метод либо прочитал идентификатор нового отчета, либо он находится в процессе чтения каких-либо других данных.

Характеристики

Тип файла
DJVU-файл
Размер
6,88 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6447
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее