Automatisch organisierte MP3-Dateien, die mit Python von Google Play Music heruntergeladen wurden

Start

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.

herunterladen

Die Songs wurden gemäß der folgenden Seite heruntergeladen. https://support.google.com/googleplaymusic/answer/1250232?hl=ja

Ordnerhierarchie

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

Holen Sie sich Informationen zu MP3-Tags

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/

Code abgeschlossen

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)

Der Punkt, der erwischt wurde

KeyError: tritt auf

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.

Im Verzeichnispfad ist ein Leerzeichen

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.

feat. Problem

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.

abschließend

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

Automatisch organisierte MP3-Dateien, die mit Python von Google Play Music heruntergeladen wurden
Mit Python abflachen
Spielen Sie Musik von einem USB-Lautsprecher mit dem ROS-Paket (gx_sound_player) ab.
Spielen Sie mit der YouTube Data API v3 mit dem Google API Python Client
Python-Anfänger nutzen die inoffizielle API von Google Play Music, um Musik abzuspielen
Verwenden von Rstan aus Python mit PypeR
[Python3] Google übersetzt Google Übersetzung ohne Verwendung von API
Hinweise zur Verwendung von MeCab aus Python
Verwenden Sie zwangsweise Google Translate aus Python
Verwenden von Cloud-Speicher aus Python3 (Einführung)
Führen Sie Ansible über Python mithilfe der API aus
Vorsichtsmaßnahmen bei der Verwendung von Phantomjs aus Python
Greifen Sie mit OAuth 2.0 von Python aus auf Tabellenkalkulationen zu
Verwenden Sie die Google Analytics-API von Python
Versuchen Sie es mit Amazon DynamoDB von Python
Umgang mit OAuth2-Fehlern bei Verwendung von Google APIs aus Python
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
Von Python bis zur Verwendung von MeCab (und CaboCha)
Spielen Sie eine Audiodatei von Python mit Interrupt ab
So aktualisieren Sie Google Sheets von Python
[Anfänger] Leicht verständliches Python-Web-Scraping mit Google Colaboratory
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
Verwenden Sie die Google Cloud Vision-API von Python
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Erstellen einer Google-Tabelle mit der Python / Google Data-API
Speichern Sie automatisch Bilder Ihrer Lieblingsfiguren aus der Google Bildsuche mit Python
Ich habe versucht, Google Translate aus Python zu verwenden, und es war einfach zu einfach