La nouvelle que Google Play Music prendra fin à la fin du mois de décembre a été annoncée. Les chansons achetées ou téléchargées peuvent être transférées sur la musique YouTube telles quelles, mais je ne sais pas quand le service prendra fin, j'ai donc décidé de les sauvegarder dans l'environnement local au cas où. Quand j'ai téléchargé les chansons, toutes les données ont été téléchargées dans le même dossier à la fois, j'ai donc décidé d'utiliser Python pour diviser les dossiers par "nom d'artiste" et "nom d'album". Même un amateur de programmation comme moi semble être capable de faire ce genre de chose.
Les chansons ont été téléchargées selon la page suivante. https://support.google.com/googleplaymusic/answer/1250232?hl=ja
La hiérarchie des dossiers est définie comme suit.
Root ├ Artiste A │ └ Nom de l'album │ └ Song_1.mp3 │ └ Music_2.mp3 ├ Artiste B ├ Artiste C
Reportez-vous ici pour savoir comment remplir le diagramme de configuration de répertoire. https://qiita.com/paty-fakename/items/c82ed27b4070feeceff6
Utilisez ʻEasyID3` pour obtenir les informations de balise incluses dans le mp3, telles que le nom de la chanson, le nom de l'artiste et le nom de l'album. J'ai fait référence à ce site. https://note.nkmk.me/python-mutagen-mp3-id3/
Soudain, le code terminé est le suivant.
from mutagen.easyid3 import EasyID3
import os
import shutil
import re
def replace(string):
return(re.sub(r'[\\/:*?"<>|]+', '-', string))
def arrange_data(mp3_path):
tags = EasyID3(mp3_path)
try:
artistname = (tags['albumartist'])
except KeyError:
artistname = (tags['artist'])
albumname = (tags['album'])
artistname = replace(artistname[0]).strip()
albumname = replace(albumname[0]).strip()
title = os.path.basename(mp3_path)
artist_dir = os.path.join(globalpath, artistname)
album_dir = os.path.join(artist_dir, albumname)
new_mp3_path = os.path.join(album_dir, title)
if not artistname in artist_list:
if not os.path.isdir(artist_dir):
os.makedirs(artist_dir)
artist_list.append(artistname)
if not albumname in album_list:
album_list.append(albumname)
if not os.path.isdir(album_dir):
os.makedirs(album_dir)
album_list.append(albumname)
try:
shutil.copyfile(mp3_path, new_mp3_path)
print(title + " is done.")
except shutil.SameFileError:
print(title + " is already exists.")
def data_check(file_list, path):
for i in file_list:
if os.path.isdir(os.path.join(path, i)):
new_path = os.path.join(path, i)
new_file_list = os.listdir(new_path)
data_check(new_file_list, new_path)
else:
arrange_data(os.path.join(path, i))
globalpath = r"Dossier contenant des chansons"
file_list = os.listdir(globalpath)
album_list = []
artist_list = []
data_check(file_list, globalpath)
Il y a des caractères non valides \ /: *?" <> |
Ne peut pas être utilisé comme nom de fichier sous Windows, mais il y avait plusieurs noms d'artiste et noms d'album contenant des caractères non valides. Ceci estre.sub J'ai utilisé
pour remplacer les caractères invalides par _
.
Si l'un des noms d'artiste ou d'album contient un espace à la fin, le nom du dossier réel et le chemin du dossier ne correspondent pas, ce qui entraîne une erreur de lecture.
Ceci a été résolu en utilisant .strip ()
.
Pour les chansons dont le nom d'artiste est quelque chose comme "feat. 〇〇" et il est difficile de trier par nom d'artiste, j'ai utilisé le nom d'artiste de l'album. Les chansons avec un nom d'artiste d'album auront la priorité, et les chansons sans nom d'artiste d'album utiliseront le nom d'artiste.
J'ai pu organiser les données en toute sécurité. Ce serait pratique si vous pouviez utiliser Python même un peu. Il semble que certaines chansons ne fonctionnent pas correctement, mais je suis content car j'ai pu traiter toutes les données locales.
Merci beaucoup!