Python и список случайных песен

Python и список случайных песен

Мой старенький IPod победило безжалостное время (обнаружился этот пункт с час назад, как раз когда планировал поехать кататься на велосипеде) :(, а так как без музыки в дороге очень неприятно (радио, транслирующее постоянно список из одних и тех же песен не добавляет оптимизма), и места в телефоне (которым теперь придется пользоваться вместо плеера) не так уж много, решил быстренько наваять программку, которая будет составлять плей-лист случайных песен из имеющихся на компе (около 5000 штук, валяющихся в одном каталоге без сортировки — старые привычки, они такие 🙂 ), и сбрасывать в телефон.

Собственно, все очень просто 🙂
1. Спрашиваем, откуда брать песни
2. Спрашиваем, куда сохранять
3. Спрашиваем, что делать с уже имеющимися песнями в целевой папке
4. Спрашиваем, сколько песен нужно отобрать
5. Работаем

Да, сам код можно и нужно оптимизировать (используя def его можно уменьшить как минимум в два раза), но это я сделаю потом 🙂 А пока и так нормально:

  1. import glob
  2. import os
  3. import re
  4. import random
  5. from shutil import copyfile
  6. import time
  7.  
  8. path = str(input('Где находится вся музыка? : \n'))
  9.  
  10. #Обрабатываем введенную ссылку для получения стандартного стиля с двумя слешами
  11. regxp = '[\w-]+[\w:]'
  12. path = re.findall(regxp, path) #Разбиваем введенный адрес на составляющие без обратного слеша
  13. path = '\\\\'.join(path) #Добавляем двойной слеш после каждой папки (под формат Python)
  14.  
  15. result_path = str(input('В какую папку будем сохранять полученные результаты? :\n'))
  16. regxp = '[\w-]+[\w:]'
  17. result_path = re.findall(regxp, result_path)  # Разбиваем введенный адрес на составляющие без обратного слеша
  18. result_path = '\\\\'.join(result_path)  # Добавляем двойной слеш после каждой папки (под формат Python)
  19.  
  20. os.chdir(result_path)
  21. print('В конечной папке имеется файлов: ', len(glob.glob('*.mp3')))
  22. deleting_all_mp3 = int(input('Очистить конечную папку (1 - да|2 - нет)?: '))
  23. if deleting_all_mp3 == 1:
  24.     os.chdir(result_path)
  25.     delete_list = glob.glob('*.mp3')
  26.     for file in delete_list:
  27.         os.remove(file)
  28.     print('Конечная папка очищена... \n')
  29.  
  30.     os.chdir(path)
  31.     all_mp3 = glob.glob('*.mp3')
  32.     quantity = int(input('Сколько песен нужно отобрать?: '))
  33.     print('Обрабатываем папку:', path)
  34.     print('Сохраняем в папку:', result_path)
  35.     print('Берем песен:', quantity)
  36.     print('Имеется песен:', len(all_mp3))
  37.     if quantity > len(all_mp3):
  38.         print('Песен меньше, чем нужно выбрать :( ')
  39.     else:
  40.         print('Работаем! \n')
  41.         start_quantity = 1
  42.         while start_quantity <= quantity:
  43.             track_number = random.randrange(1, len(all_mp3))
  44.             print('Выбрана песня:', track_number)
  45.             track = all_mp3[track_number]
  46.             print(track)
  47.             file_for_copy = path + '\\' + track
  48.             file_to_copy = result_path + '\\' + track
  49.             copyfile(file_for_copy, file_to_copy)
  50.             time.sleep(2)
  51.             print('Песня скопирована... \n \n')
  52.             start_quantity = start_quantity + 1
  53.  
  54. elif deleting_all_mp3 == 2:
  55.     os.chdir(path)
  56.     all_mp3 = glob.glob('*.mp3')
  57.     quantity = int(input('Сколько песен нужно отобрать?: '))
  58.     print('Обрабатываем папку:', path)
  59.     print('Сохраняем в папку:', result_path)
  60.     print('Берем песен:', quantity)
  61.     print('Имеется песен:', len(all_mp3))
  62.     if quantity > len(all_mp3):
  63.         print('Песен меньше, чем нужно выбрать :( ')
  64.     else:
  65.         print('Работаем! \n')
  66.         start_quantity = 1
  67.         while start_quantity <= quantity:
  68.             track_number = random.randrange(1, len(all_mp3))
  69.             print('Выбрана песня:', track_number)
  70.             track = all_mp3[track_number]
  71.             print(track)
  72.             file_for_copy = path + '\\' + track
  73.             file_to_copy = result_path + '\\' + track
  74.             copyfile(file_for_copy, file_to_copy)
  75.             time.sleep(2)
  76.             print('Песня скопирована... \n \n')
  77.             start_quantity = start_quantity + 1
  78.  
  79. print('Все! :)')

И да — код доступен на Git 🙂