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

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

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

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

ЕЕЕК БЕТ. Перемещает позицию указателя в файле в заданное смещение (которое может быть отрицательным) относительно текущей позиции, если аргумент зЛелсе имеет значение оз. ЛЕЕК СОВ, или относительно конца файла, если аргумент ьлелсе имеет значение оз. РЕЕК ЕКО. Запись всегда выполняется в конец файла, если был определен режим добавления в конец "а", независимо от местоположения указателя в файле. В текстовом режиме в качестве смещений должны использоваться только значения, возвращаемые методом те11( ) Возвращает Тгсе, если Т поддерживает возможность произвольного доступа Возвращает текущую позицию указателя в файле отно- сительно его начала Усекает файл до текущей позиции указателя в файле или до размера юге, если аргумент з) ге задан Возвращает Тгбе, если 1 был открыт для записи записывает в файл объект з типа ьутезуьутеаггау, если он был открыт в двоичном режиме, и объект з типа з1г, если он был открыт в текстовом режиме Записывает в файл последовательность объектов (строки — для текстовых файлов, строки байтов — для двоичных файлов) 382 Глава 7.

Работа с файлами При чтении записи могут иметь место четыре ситуации, которые следует учитывать: запись не существует, то есть указанный индекс находится за пределами файла; запись пустая; запись была удалена и нормальная запись. Если запись не существует, частный метод вееК то тпсех() возбудит исключение 1пСехЕггог. В противном случае он переместит указатель в файле в позицию первого байта требуемой записи, и мы можем прочитать байт состояния. Если состояние не равно значению ОКАТ', то запись должна быть либо пустой, либо удаленной, и в этом случае вызывающей программе возвращается значение ))опе, в противном случае возвращается запись. (При попытке чтения пустой или удаленной записи, вместо того чтобы возвращать йопе, можно было бы возбуждать наше собственное исключение, например, В1апКВесогОЕггогили Ое1етесйесогОЕггог.) Сет всех тс тппех(ва1Г, тпаех); тт ва)т.авто Г)цва: вам .

ГП,Г)цва() ве!Г. Гл.веех(0, ов.РЕЕК ЕИО) епп = ве1Г. Га.тем() сттват = !паах ° ве1Г. гессга в!ве !г с(гает >= епс; гатве 1паехЕггог("пс гессгп ат швех ров!!топ (0)".Гогаат( шсех)) ве)г. гп.веек(с!гает) Этот частный вспомогательный метод используется некоторыми другими методами для перемещения указателя в файле в позицию первого байта записи с заданным индексом. Сначала метод проверяет, находится ли заданный индекс в пределах файла. Для этого выполняется перемещение указателя в конец файла (смещение О относительно конца файла), и с помощью метода те11() определяется абсолютная позиция указателя.

Если смещение записи (индексхистинный размер записи) оказывается в конце файла или за его пределами, возбуждается соответствующее исключение. В противном случае выполняется перемещение указателя в заданную позицию, откуда будет выполняться следующая операция чтения или записи. Сет Се)!таз (ва)Г, тпаех): ве1Г. веех тс !ппах(!пвех) агате = ве)Г. ГП.геап(1) тт агате != ОКАУ: гетцгп ве1Г. Гл.ваап(!пвах * ве1Г, гессгп вые) ве1Г. Гл.иг!те( ОЕЕЕТЕО) тт ве1т,артс Г1цва: ве1(. ГП. (1цвП() Сначала метод выполняет перемещение в нужную позицию в файле. Если указанный индекс находится в пределах файла (то есть если не было возбуждено исключение 1пцехЕггог) и запись не пустая и не была Произвольный доступ к двоичным данным е файлах 383 удалена ранее, то выполняется запись значения ОЕЕЕТЕО в байт состоя- ния записи.

Оет ипсе1есе(ве1(, !паех): ве1(. веем со споех(споех) вСате = ве)Г. Го.геаа(т) !Г вСате == ОЕЬЕТЕО: ве1(. Сл.веех(!паех * ве1(. геоогз в!се) ве1(. Гь.нг!Се( ОКАУ) сс ве1(.авто (1овл: ве1Г. Гй.(1ово() гетогп Тгое гесогп Ра1ве Сначала метод отыскивает требуемую запись и читает байт состояния. Если запись была удалена, в байт состояния записывается значение ОКАТ и вызывающей программе возвращается значение Тгое как свидетельство успешного выполнения операции; в противном случае (для пустой или не удалявшейся ранее записи) возвращается значение Еа1ве. Оет 1еп (ве1(): сг ве1(.восо (1овп; ве1(. гп.

(1овп() ве1(. Го.веех(0. ов.БЕЕК ЕИО) епо = ве1г. сп.се11() гесогп епа гг' ве1(. геоогз в!зе Этот метод возвращает количество записей в двоичном файле. Это число определяется путем деления позиции последнего байта в файле (то есть количества байтов в файле) на истинный размер записи. На этом мы закончили рассмотрение основных функциональных возможностей класса В!пагуйесогср!1е. ВспагулесогоРс1е. Остался последний вопрос, который необходимо рассмотреть: уплотнение файла с целью убрать пустые и удаленные записи. Фактически имеется два способа решения этой задачи.

Первый способ состоит в том, чтобы перезаписать пустые или удаленные записи записями с большими значениями индексов и усечь файл с конца, если в нем имелись пустые или удаленные записи. Этот способ реализован в методе спр1асе соерасс(). Другой способ состоит в том, чтобы скопировать непустые и не- удаленные записи во временный файл и затем переименовать его, дав имя оригинального файла. Использование временного файла удобно, в частности для создания резервных копий. Этот способ реализован в методе соерасс(). Начнем рассмотрение с метода !пр1асе соарасС(), разделив его на две части: Оет !пр1асе возраст(ве)Г); спаех = 0 1епоСП = 1еп(ве1Г) 384 Глава 7. Работа с файлами тгп!1е тпбех < 1епотп: ве1(, веек то тпбех(юбех) агате = ве)т.

гь. геаб(!) тг ВтатЕ )= ОКАТ: тог пехт тп гапое(!пбех А 1, 1епеть): ве1(. веек то тпбех(пех!) агате = ве)т. (ь.геаб(!) тг агате == ОКАТ. ве1([тпбех) = ве1([пехт! бЕ1 ВЕ)т[ЬЕхт! Ьгеах е1ве: ЬгеаК !пбех г= ! В методе выполняются итерации по всем записям н для каждой определяется ее состояние. Если обнаружнвается пустая нлн удаленная запнсь, выполняется поиск следующей непустой н неудаленной записи. Если такая запись обнаруживается, производится замещение пустой нлн удаленной записи непустой н неудаленной запнсью н выполняется удаление оригинальной записи; в противном случае цикл ип!1е прерывается, так как были просмотрены все непустые н неудаленные записи. ве1(.

веек то !пбех(0) агате = ве1(. гь.геаб(1) !Г агате != ОКАТ; ве1б тп,тгопсате(0) е1ве: 1!и!т = Коле тог !пбех !и галсе(1еп(ве1() - 1, О, -!): ве1(. вееК то !пбех(!паек) агате = ве1(. ть,геаб(1) втате )= ОкАУ: 1!етт = тпбех е1ве; ЬгеаК тт 1татт !в пат коле: ве1(. гь.тгопсате(1!и!т * ве1(. гесогб в!ге) ве1(. (ь.(1овь() Если первая запись пустая нлн удаленная, то все онн должны быть пустыми нлн удаленными, так как предыдущий фрагмент кода переместнл все непустые н неудаленные записи в начало файла, оставив пустые н удаленные запнсн в конце. В этом случае можно просто усечь размер файла до нуля.

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

Это решение реализовано в методе соарес!(), который показан ниже. бвг СЬВРаСС(ВЕ1С, КЕВР ЬаСКьскза1ВВ): ссврасСГС1е = вв1(. Сл.паве + ".ЗИ" Ьвснирт!1е = ве1(. Сь.лаве + ".ЬЬК" вв1С. ГЬ.С1бвв() ве1С СЬ вввК(0) СЬ = орел(саврас!С!1е, пзЬ") ньс1е Тгбе: бата = ве1С. СЬ гевб(вв1(. гессгб эссе) ст пот баСа: ЬгеаК ст бата(:1) == ОКАУ: сь.нгссе(баса) Сл.с)ьве() ве)т. Сл.с)ьвв() ов.гвлвае(вв1(. Сл.лаев, ЬЬЬКиргт1е) ов гвпаве(соарасст!1в, ве1(. Сь.лазе) Сг пот Кеер ЬвсКбр: ов.гевосге(ЬвсКьртт!е) ве1(. СЬ = среп(ве1(.

Сл.свае, "ггЬ") Этот метод создает два файла — уплотненный файл и резервную копию оригинального файла. Имя уплотненного файла совпадает с именем оригинального файла, но к нему добавляется расширение .эвгЯ, точно так же имя файла резервной копии совпадает с именем оригинального файла, но имеет расширение .Ьа)с. Метод читает записи из оригинального файла одну за другой и все непустые и неудаленные записи записываются в уплотненный файл.

(Обратите внимание, что записываются истинные записи, то есть байт состояния плюс запись пользователя.) Инструкция !С бата(:1) == ОКАу: таит в себе одну хитрость. Оба объекта — и объект бата и объект ОКАу — являются объектами типа Ьутев. Нам необходимо сравнить первый байт (один байт) объекта баСа с объектом ОКАУ. Когда к объекту типа Ьутев применяется операция среза, возвращается объект Ьутев, но когда извлекается единственный байт, например, бата[0), возвращается объект типа Спт — значение байта, Поэтому здесь сравниваются 1-байтовый срез объекта баСа (его первый байт, байт состояния) с 1-байтовым объектом ОКАУ. (Сравнение можно было бы реализовать как !С бата(0) == ОКАу(О):, в этом случае сравнивались бы два значения типа Слт.) 386 Глава 7. Работа с файлами В конце оригинальному файлу присваивается имя резервной копии, а уплотненному файлу — имя оригинального файла.

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

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

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

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