Решение задания №4
Задание. Создание модуля
Есть папка с текстовыми файлами — «библиотека» (в смысле, книжная библиотека). Разработаем набор базовых функций для работы с этой библиотекой и оформим этот набор в виде модуля.
Данные для работы
Библиотека представляет собой папку с текстовыми файлами. Эти текстовые файлы представлены в особом формате. Расширение имени файла с книгой — .txt. Например, pushkin_skazka_o_tsare.txt. Любые другие файлы игнорируются. Все книги библиотеки лежат в одной папке. Имя папки заранее неизвестно.
Каждая книга — текстовый файл в кодировке UTF-8. Первая строка файла — имя автора. Вторая строка — название книги. Третья строка — аннотация. Начиная с четвёртой строки и до конца файла идёт текст книги.
Кроме того, в каталоге может лежать специальный файл с именем description.txt. Этот файл не является книгой и содержит описание библиотеки. Это так же текстовый файл в кодировке UTF-8. Соответственно, этот файл нужно игнорировать и обращаться к нему только если запрошено описание библиотеки.
Скачайте пример папки с библиотекой в виде архива.
Интерфейс модуля
Работа с библиотекой должна производиться следующими функциями.
Во всех функциях модуля первый параметр library_dir – это имя папки с библиотекой.
read_library_description
Формат функции:
read_library_description(library_dir)
Функция находит в папке с библиотекой файл description.txt и возвращает содержание этого файла. Если файла нет или его невозможно прочитать, возвращает пустую строку.
Необходимо (!) предусмотреть обработку ошибок чтения файла.
get_book_files
Формат функции:
get_book_files(library_dir)
Функция возвращает список имён файлов книг в указанной папке. Имена должны быть относительными, не абсолютными. Файл description.txt нужно проигнорировать, то есть даже если он присутствует, в возвращённом списке его быть не должно. Например, если в папке лежали файлы:
ali-baba-i-40.txt description.txt skazki.txt vinni-pooh.doc zimovie.doc Функция должна вернуть следующий результат:
[
"ali-baba-i-40.txt",
"skazki.txt"
]
read_book_info
Формат функции:
read_book_info(library_dir, book_file)
Параметры:
library_dir – папка библиотеки book_file – имя файла с книгой Функция возвращает кортеж из трёх значений: (автор, название, аннотация). Напомню, что каждый текстовый файл с книгой содержит имя автора в первой строке, название во второй и аннотацию в третьей строке.
Например, если файл Arap_Petra_Velikogo.txt начинается так:
Александр Сергеевич Пушкин
Арап Петра Dеликого
Аннотация: Александр Пушкин. Арап Петра Великого
Железной волею Петра Преображенная Россия. Н. Языков.
ГЛАВА I
Я в Париже; Я начал жить, а не дышать. То функция read_book_info(library_dir, "Arap_Petra_Velikogo.txt") должна вернуть такой результат:
( "Александр Сергеевич Пушкин", "Арап Петра Dеликого", "Аннотация: Александр Пушкин. Арап Петра Великого" ) Необходимо (!) предусмотреть обработку ошибок чтения файла.
get_authors
Формат функции:
get_authors(library_dir)
Функция возвращает список имён авторов, книги которых есть в библиотеке. Имена в списке не должны повторяться, конечно. Для этого придётся пройти по списку файлов книг и прочитать имя автора из каждой книги. Например, для имеющегося в наличии примера результат должен быть такой:
["Александр Сергеевич Пушкин", "Николай Васильевич Гоголь"]
get_all_books_info
Формат функции:
get_all_books_info(library_dir)
Эта функция возвращает список книг в данной папке, причём каждая книга представлена в виде кортежа (автор, название, аннотация, имя файла). То есть она объединяет работу функций get_book_files и read_book_info.
Оформление
Все функции следует поместить в модуль library_dir.py. К каждой функции желательно написать документацию.
Так же есть смысл написать тестовую программу, которая загружает этот модуль и проверяет работу каждой функции модуля.