Уважаемый читатель, кто читает эту статью не прочитав предыдущие
<=====
учится ходить, не умея твёрдо стоять!
Продолжу наполнять Розалию новыми умениями. Она уже умеет искать в Wikipedia, теперь пусть научится включать музыку. Для этого я создам новое умение – новый файл с расширением py. Затем просто подключу это умение к Розалии, как делал это с поиском в Wikipedia. Для реализации задуманного воспользуюсь модулем os. В этом модуле описаны методы работы с функциями операционной системы, например, этот модуль, может запускать файлы. Модуль os является встроенным модулем Python. Его устанавливать с помощью менеджера пакетов pip не нужно, достаточно импортировать os в программу Python. Т.е. создам файл play_music.py и первое, что там напишу –
import os
Начало положено. Теперь поставлю задачи - что мне нужно сделать:
- Задать директорию с файлами музыки
- Получить список файлов из этой директории
- Выбрать файлы с расширением mp3
- Воспроизвести файл музыки
Данный алгоритм не совершенный:
- Во-первых, мне в программе приходится задавать директорию с музыкой
- Во-вторых, модуль os позволяет запустить только один файл для воспроизведения, а не список файлов.
По-сути я задаю Розалии примитивные действия, говорю «найди в Wikipedia» или «включи музыку», она выполняет. Розалия пока не умеет искать все музыкальные файлы, сортировать их по жанрам и т.д. Но это всё впереди.
Сначала ребенок учится твердо стоять, а затем твердо идет к своей цели
Задам директорию с музыкой
Начну с определения переменной musik_PLAY_dir , именно эта переменная будет хранить путь к папке с музыкой. На моем компьютере это путь – «d:/12». Обратите внимания имя переменой, которую я задал «PLAY» написано большими буквами. Этим я хочу подчеркнуть, сказанное раннее: Для Python PLAY и play это разные слова, он чувствительный к регистру символов.
musik_PLAY_dir = “d:/12”
Все, в musik_PLAY_dir я поместил строку “d:/12”.
Еще обращу внимание на строку “d:/12”, в которой косая черта стоит «/» не как в windows «\». Причина в том, что модуль os срабатывает на разных операционных системах. В Linix, например, для указания пути ставиться «/», а windows «\». В модуле os реализован механизм правильного получения пути к файлу или папки, независимо от операционной системы. Модуль os поймет меня правильно, если я укажу – «d:/12».
Теперь мне нужно получить список файлов из каталога «d:/12». Для этого у модуля os есть метод listdir, который возвращает список файлов внутри каталога. Чтобы обратится к этому методу, нужно указать имя модуля и через точку его метод:
LIST_FILE = os.listdir (musik_PLAY_dir)
Переменная равна os.listdir (Директория) – я сказал Python, что хочу получить список файлов в директории «d:/12» и результат поместить в переменную LIST_FILE. Таким образом, переменная LIST_FILE должна содержать список файлов из директории d:/12». Выведу эту переменную командой print и посмотрю, правильно ли меня понял Python:
print(LIST_FILE)
Что такое список в Python?
Я получил, то, что надо! Список файлов из директории «d:/12».
Список для Python - это набор, совокупность элементов, который заключен в квадратные скобки
[“1.mp3”, ”2.mp3”, ”AlbumArtSmall.jpg”, ”folder.jpg”] - список. Каждый элемент списка имеет свой индекс, начиная с нуля.
- “1.mp3” - 0 элемент
- “2.mp3” - первый элемент
- ”AlbumArtSmall.jpg” - второй элемент
- ”folder.jpg” - третий элемент
Индекс определяет местоположение элемента в списке. Например, переменная LIST_FILE содержит список файлов и чтобы обратится к первому элементу этого списка, вывести его на экран, я запишу:
print( LIST_FILE[0] )
Python выведет - 1.mp3.
Как задавать список в Python?
В принципе, чтобы задать список файлов из директории «d:/12», я мог бы сам. открыть папку «d:/12», посмотреть список файлов и записать в Python такой код:
LIST_FILE=[“1.mp3”, “2.mp3”, ”AlbumArtSmall.jpg”, ”folder.jpg” ]
Но за меня это сделала функция listdir модуля os. Таким образом я могу задавать любой список в Python: числа, строки, да хоть воздушные шары - воздушный шар=["Красный","Синий","Зеленый"], а обратиться к элементу списка могу по индексу
воздушные шары[0] ="Красный"
Теперь соединим имя файла с его директорией
Итак, что я имею: переменная musik_PLAY_dir содержит директорию, в которой находятся моя музыка, а переменная LIST_FILE содержит список файлов внутри этой директории -
[“1.mp3”, ”2.mp3”, ”AlbumArtSmall.jpg”, ”folder.jpg”]
,где LIST_FILE[0] = 1.mp3. И мне нужно соединить директорию с именем файла.
Для этого у модуля os есть метод path, в котором реализованы алгоритмы работы с путями к директориям, одним из таких алгоритмов является алгоритм соединение пути с учетом операционной системы - join. Вот как это звучит по-русски:
в модуле os –реализованы алгоритмы работы с операционной системы, одним из таких алгоритмов является path, который позволяет работать с путями в операционной системе. А внутри path еще алгоритм, который соединяет пути с учетом особенностей операционной системы – join.
А на языке Python "все это родовое дерево", кто и куда вложен, я запишу так:
PLAY=os.path.join(musik_PLAY_dir, LIST_FILE[0])
join соединяет путь к файлу с его именем - d:/12\1.mp3 (LIST_FILE[0]=1.mp3) и результат я помещаю в переменную PLAY. Осталось теперь только запустить файл 1.mp3 по указному пути. Для этого у модуля os есть еще один козырь - функция startfile.
os.startfile(PLAY)
На этом пока все. Умение включать музыку (правда только одну песню) я описал в файле play_music.py. Осталось "влить" это умение Розалии. Об этом я поговорю уже в следующий раз.
Читатель оставайтесь на канале, будьте дерзкими в своих идеях. Этот канал не о скучном программировании и хилых "програймерах", которые кроме кода и цифр ничего не видят. Это канал о гармонично-развитой личности.