Die Nachricht, dass Google Play Music Ende Dezember endet, wurde angekündigt. Gekaufte oder hochgeladene Songs können unverändert auf YouTube-Musik übertragen werden, aber ich weiß nicht, wann der Dienst beendet wird. Daher habe ich beschlossen, sie für alle Fälle in der lokalen Umgebung zu sichern. Als ich die Songs heruntergeladen habe, wurden alle Daten gleichzeitig in denselben Ordner heruntergeladen. Daher habe ich mich entschieden, Python zu verwenden, um die Ordner durch "Künstlername" und "Albumname" zu unterteilen. Sogar ein Programmier-Amateur wie ich scheint in der Lage zu sein, so etwas zu tun.
Die Songs wurden gemäß der folgenden Seite heruntergeladen. https://support.google.com/googleplaymusic/answer/1250232?hl=ja
Die Ordnerhierarchie ist wie folgt festgelegt.
Root ├ Künstler A. │ └ Albumname │ └ Song_1.mp3 │ └ Music_2.mp3 ├ Künstler B. ├ Künstler C.
Hier erfahren Sie, wie Sie das Verzeichniskonfigurationsdiagramm ausfüllen. https://qiita.com/paty-fakename/items/c82ed27b4070feeceff6
Verwenden Sie "EasyID3", um die im MP3 enthaltenen Tag-Informationen abzurufen, z. B. den Namen des Songs, den Namen des Interpreten und den Namen des Albums. Ich habe auf diese Seite verwiesen. https://note.nkmk.me/python-mutagen-mp3-id3/
Plötzlich lautet der vollständige Code wie folgt.
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"Ordner mit Titeln"
file_list = os.listdir(globalpath)
album_list = []
artist_list = []
data_check(file_list, globalpath)
Es gibt ungültige Zeichen \ /: *?" <> |
Kann unter Windows nicht als Dateinamen verwendet werden, aber es gab mehrere Künstlernamen und Albumnamen, die ungültige Zeichen enthielten. Dies ist" re " Ich habe verwendet, um ungültige Zeichen durch
_` zu ersetzen.
Wenn einer der Künstlernamen oder Albumnamen am Ende ein Leerzeichen enthält, stimmen der tatsächliche Ordnername und der Ordnerpfad nicht überein, was zu einem Lesefehler führt.
Dies wurde mit .strip ()
gelöst.
Für Songs, deren Künstlername so etwas wie "feat. 〇〇" ist und es schwierig ist, nach Künstlernamen zu sortieren, habe ich den Künstlernamen des Albums verwendet. Songs mit einem Albumkünstlernamen erhalten Vorrang, und Songs ohne Albumkünstlernamen verwenden den Künstlernamen.
Ich konnte die Daten sicher organisieren. Es wäre praktisch, wenn Sie Python auch nur ein wenig verwenden könnten. Es scheint, dass einige Songs nicht richtig funktionieren, aber ich bin glücklich, weil ich alle lokalen Daten verarbeiten konnte.
Vielen Dank!
Recommended Posts