Саммерфилд - Программирование на Python 3 (1077331), страница 57
Текст из файла (страница 57)
рас П. Ьавепаае( ) соответственно. Имя файла также может быть разбито на две части — имя и расширение, с помощью функции ов. расп. вр1111ехс(). Функция ов, рзсп,)осп() принимает произвольное число строк путей и возвращает единый путь, используя платформозависимый разделитель каталогов. Если в программе потребуется получить комплекс сведений о файле или каталоге, можно использовать функцию оя. всат(), но когда необходимы только отдельные элементы информации, можно использовать соответствующие функции из модуля ов.расп, например, ов.респ.ехсвтв(), ов.
рзсп. десв!се(), оя. раСП, !вс!1е() или ов. рз1П, свдс г(). Модуль асаесурев включает функцию асае1урев.доевв 1уре(), которая пытается определить тип М1МЕ файла. Пример: модули ов и ов.раФ Ниже показано, как можно использовать модули ов и ов, ресП для создания словаря, каждый ключ которого представляет собой имя файла (включая его путь), а значение — отметку времени (количество секунд, прошедших от начала эпохи), когда произошло последнее изменение файла, для всех файлов в каталоге рз1П: бете Ггоа пеае = () гог пепе сп ов. 1сясдсг(ра1п): гоппеае = ов.ра1п.)осп(респ, пепе) !Г ов.раСП.!ятс1е(то11паае): басе тгоа папе(то11пеае) = ов.респ.десас!ае(то11паае) 262 Глава 5. Модули Этот фрагмент программного кода выглядит очень понятным, но он может использоваться для составления перечня файлов только в одном каталоге.
Если необходимо выполнить обход всего дерева каталогов, можно воспользоваться функцией оэ, на18( ) . Ниже приводится фрагмент программы Г(пЮирру.' Программный код создает словарь, каждый ключ которого представляет собой кортеж из двух элементов (размер файла и имя файла), где имя файла не содержит пути к нему. Каждое значение словаря — это список полных имен файлов, соответствующих имени файла в ключе и имеющих тот же размер: сага = со11есггопз.сегас1101ст(1181) гог гоог, сггз, г>1еэ 1п са.гга18(рагь): Гог Г11епаве [п (41еа; Ги11паве = оэ.рагп.)о1п(гоо1, (11епаве) ьеу = (ое.рагь.регатте(гс11паве), г!1епаве) Сага[хеу].аррепз((р11паве) Для каждого каталога функция оэ, иа1Ь() возвращает путь к корневому каталогу поддерева и два списка, один из них — это список подкаталогов в каталоге, а второй — список файлов в каталоге.
Чтобы получить полный путь к файлу, необходимо объединить путь к корню и имя файла. Примечательно, что здесь не требуется выполнять рекурсию, так как функция оэ. иа18() делает это сама. После сбора всей необходимой информации можно выполнить обход получившегося словаря и вывести отчет о возможных дубликатах файлов: (ог зые, 841епаве (п аоггес(сага); павез = Са18[(81ге, (11епаве)] гГ 1еп(ранее) > 1; рг!пг("(О) ((1) ьугез) вау ье сор!гсагес " "((2) (41еэ): Ь (огваг((11епаве, аые, 1еп(пагаез))) гог паве гп павеэ: рггпг("11(0)'ь гогваг(паве)) Поскольку в качестве ключей словаря используются кортежи (размер и имя файла), нам не требуется использовать функцию Ьеу, чтобы отсортировать данные по размеру файла.
Если какому-либо кортежу (размер, имя файла) соответствует более одного имени файла в списке, зто могут быть дубликаты одного и того же файла. зпе!132.011 (8460288 Ьу1ез) вау Ье Срр1гсагез (2 (11ее), '1вгпсова1еусгев321зье1132. 011 '1вгпсове'геуе1ев321011сасье1зье1!32.011 В главе 9 приводится более сложная версия программы поиска дубликатов файлов, ~!вг(г(и)г(!си(ееи.ру, которая использует многопоточный режим ра.
боты н применяет вычисление контрольных сумм М)18. Обзор стандартной библиотеки языка Рутбоп 263 Это последний элемент из вывода, содержащего 3 282 строки, полученного командой 1'1пеоар. ру ти1пеонз в системе т(Г1пдотуз ХР. Работа с сетями и Интернетом Пакеты и модули для работы с сетями и Интернетом составляют основную часть стандартной библиотеки РуЬЬоп. На самом низком уровне модуль зоскет предоставляет наиболее фундаментальные функциональные возможности для работы с сетями, среди которых имеются функции создания сокетов, выполнения запросов к 1)!х(Б (1)оша1п )т(вше Буз(еш — система доменных имен) и обработки 1Р-адресов (1п$егпе( Рго1осо1 — протокол Интернета).
Настроить шифрование и аутентификацию при работе с сокетами можно с помощью модуля за1. Модуль аоскетзегчег предоставляет реализации серверов ТСР (Тгапзпйззюп Соп(го! Рго1осо! — протокол управления передачей) и Ш)Р (()зег 1)а$аагат Рго(осе! — протокол пользовательских дейтаграмм). Эти серверы могут обрабатывать запросы непосредственно или создавать отдельные процессы (за счет ветвления) и потоки управления для обработки каждого запроса. Асинхронная обработка сокетов на стороне клиентов и серверов может быть реализована с помощью модуля азупсоге и построенного на его основе более высокоуровневого модуля азупс па(.
В стандартной библиотеке РуЬЬоп имеется реализация т(ГБ01 (Ъ(теЬ Бегчег 0аЬечгау 1п(ег1асе — интерфейс шлюза веб-сервера), представляющая собой стандартный интерфейс между веб-серверами и веб-приложениями, написанными на языке Ру(Ьоп. В поддержку стандарта пакет нзд1гег предоставляет рекомендации по внедрению т(((Б01 и содержит модули для реализации серверов НТТР, совместимых с требованиями спецификаций т(1(801, способных обрабатывать заголовки ответов и сценарии С01 (Сопппоп 0а1етчау 1пЬегГасе — общий шлюзовой интерфейс). Кроме того, модуль Ьттр, аегчег предоставляет реализацию сервера НТТР, которому можно определить обработчик запросов (стандартная реализация предоставляется) для запуска сценариев С01.
Модули Пттр,сооазез и Ьттр.сооК(е)аг содержат функции для работы с соо)с(ез, а поддержка сценариев С01 предоставляется модулями сдз и сд1(Ь. Доступ к запросам НТТР на стороне клиента может быть реализован с помощью модуля Ьттр. с11епт, хотя более простой и удобный доступ к адресам ()ВЬ обеспечивается модулями из пакета пг111Ь: пг111Ь. рагзе, зг11тЬ, геооезт, сг11(Ь.
гезропзе, пг111Ь.еггог и зг11!Ь. говотрагзег. Загрузка файлов из Интернета выполняется очень просто, как показано ниже: гп = иг111ь.гепзезт.зг1ореп("пттр:Оннн.рутпоп.огд/тппех.птп1") Шп1 = тл.геап().аесоае("а(та') Функция иг111Ь. гедиезт. сг1орап() возвращает объект, который ведет себя практически как объект файла, открытый для чтения в двоичном 264 Глава 5. Модули режиме. Этот фрагмент получает файл Сиг(ех.гс(т1 с веб-сайта РуСЬоп (в виде объекта Ьугеа) и запоминает его в виде строки в переменной Пгв1. Имеется также возможность загружать файлы и сохранять их в локальной файловой системе с помощью функции пг111Ь.
геапеаС. пг1гегтече(). Имеется возможность производить синтаксический анализ документов НТМ). и ХНТМ( с помощью модуля псв1. рагаег; адреса ()В) могут анализироваться и создаваться с помощью модуля с г11гЬ. рагзе; а файлы гоЬогюгх( могут анализироваться с помощью модуля пг11сЬ. гоЬоС- рагаег. Данные в формате ЛЯОМ ()ачаЯсг1рС ОЬ)есС МоСаС1оп — формат записи объектов )ачаЯсг1рС) могут читаться н записываться с помощью модуля ) зоп. Помимо поддержки серверов и клиентов НТТР в библиотеке имеется поддержка ХМЬ-ВРС (ВешоСе Ргосес(пге СаП вЂ” вызов удаленных процедур), реализованная в виде модулей хв1грс, аегчег и хв1грс.с1гепг. Дополнительные возможности для работы на стороне клиента с протоколом РТР (Р11е ТгапэроСг РгоСосо! — протокол передачи файлов) реализованы в виде модуля Ггр11Ь; для работы с протоколом ММТР (МеС- ууог)г Меууз ТгапэрогС РгоСосо1 — сетевой протокол передачи новостей)— в виде модуля ппгр1гЬ; для работы с протоколом ТЕ1.МЕТ вЂ” в виде модуля Се1пег11Ь.
Модуль эвСрз предоставляет реализацию сервера ЯМТР (Яппр1е Май ТгапэрогС РгоСосо1 — упрощенный протокол электронной почты), модуль звгр11Ь предоставляет возможность реализации клиентов электронной почты для протокола ЯМТР, модуль 1вар11Ь вЂ” для протокола 1МАР4 (1пСегпеС Мевэаяе Ассеэв РгоСосо1 — протокол интерактивного доступа к электронной почте) и модуль рор11Ь вЂ” для протокола РОРЗ (РоэС ОЛ(се РгоСосо1 — протокол электронной почты). Возможность доступа к почтовым ящикам различных форматов обеспечивает модуль ва11Ьох. Отдельные сообщения электронной почты (включая сообщения, состоящие из нескольких частей) могут создаваться и обрабатываться средствами модуля еваг1. Если возможностей пакетов и модулей стандартной библиотеки окажется недостаточно, можно обратиться к Тш1зСег( (шшшхш(агег(тап г(х.сот) — обширной библиотеке средств для работы с сетями, разрабатываемой сторонними разработчиками.
Кроме того, существует множество сторонних библиотек, предназначенных для разработки вебприложений, включая 1))андо (шшш.г(!апИоргоуеспсот) и ТигЬоаеагэ (шшшхигбояеага.огя), а также Р1опе (шшш.р1опе.огя) и Хоре (шшш.горе.огя), представляющих собой целые платформы для разработки систем управления содержимым. Все эти библиотеки написаны на языке РуСЬоп.
Обзор стандартной библиотеки языка Рутпоп 265 хм~ Для парсинга документов ХМЬ широко используются два основных подхода. Один из них основан на анализе РОМ (Росшпепь ОЬ)ест Мос)е!— объектная модель документа), а другой — на использовании ЯАХ (Яппр!е АР1 гог ХМ1 — упрощенный прикладной интерфейс для работы с документами ХМ1). В библиотеке имеется два парсера РОМ вЂ” один из них представлен модулем хв1. Зов, а второй — модулем хв1. Сов. втптСов. Парсер ЯАХ представлен модулем хв1. зах.