PDF-Version - freiesMagazin
PDF-Version - freiesMagazin
PDF-Version - freiesMagazin
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
def generate_extended_playlist(songs):<br />
playlist = [u"#EXTM3U\n"]<br />
for id, artist , title , album , length , path in songs:<br />
playlist.append("#EXTINF :{0},{1} - {2}\n".format(int(length), <br />
artist ,<br />
title))<br />
playlist.append ("{0}\n".format(path))<br />
return u"".join(playlist)<br />
def generate_simple_playlist(songs):<br />
return u"\n".join(hit["path"] for hit in songs)<br />
def dump(playlist , path , encoding="utf -8"):<br />
with codecs.open(path , "w", encoding=encoding) as fh:<br />
fh.write(playlist)<br />
Die ersten beiden Funktionen erwarten jeweils<br />
eine Liste songs. Diese Songs sind im Fall dieses<br />
Skripts eigentlich Row-Objekte, wie sie von<br />
der Methode search des DatabaseConnectors<br />
zurückgegeben werden. Diese Row-Objekte verhalten<br />
sich dahingehend wie Listen und Dicts, als<br />
dass sie den Zugriff über Schlüsselworte ebenso<br />
ermöglichen, wie über Listen-Indizes.<br />
Die Funktion generate_simple_playlist erstellt<br />
nun schlicht eine Zeichenkette mit Pfadangaben,<br />
getrennt durch einen Zeilenumbruch (\n).<br />
Die Zeile mutet zunächst recht kompliziert an:<br />
return u"\n".join(hit["path"] for <br />
hit in songs)<br />
Dies ist aber nur eine kompaktere und effizientere<br />
Variante für folgenden Code (siehe Abschnitt<br />
„Kleine Aufgabe“ unten):<br />
paths = []<br />
for hit in songs:<br />
paths.append(hit["song"])<br />
return u"\n".join(paths)<br />
Die so erstellte Zeichenkette mit Pfandangaben<br />
kann als einfache m3u-Liste gespeichert<br />
werden. Sollen außerdem noch Meta-<br />
Informationen in der Wiedergabeliste gespeichert<br />
werden, muss eine erweiterte m3u-Liste erstellt<br />
werden. Dies geschieht durch die Funktion<br />
generate_extended_playlist. Auch hier wird<br />
eine Zeichenkette erstellt, die später als Wiedergabeliste<br />
gespeichert werden kann. Allerdings<br />
wird dabei zunächst der Umweg über eine Liste<br />
gegangen: Jeder Eintrag in der Liste repräsentiert<br />
später eine Zeile. Mit<br />
playlist = [u"#EXTM3U\n"]<br />
PROGRAMMIERUNG<br />
wird die Liste playlist direkt initial befüllt, sodass<br />
die spätere Wiedergabeliste in der ersten<br />
Zeile die Information enthält, dass es sich um eine<br />
erweiterte Wiedergabeliste handelt. In der folgenden<br />
for-Schleife werden die einzelnen Lieder<br />
durchlaufen. Für jedes Lied wird dabei ein<br />
Listen-Eintrag mit Meta-Informationen (#EXTINF)<br />
und ein Listeneintrag mit der dazugehörigen<br />
Pfadangabe erstellt. Erst in der letzten Zeile der<br />
Funktion wird aus der Liste playlist mit Hilfe<br />
der Methode join eine Zeichenkette, die direkt<br />
zurückgegeben wird.<br />
Die dritte Funktion dump schreibt schließlich eine<br />
gegebene Zeichenkette (in diesem Fall die<br />
Wiedergabelisten) in eine Datei. Statt der Funktion<br />
open kommt dabei allerdings die gleichnamige<br />
Funktion aus dem Modul codecs zum Einsatz.<br />
Diese Funktion hat den Vorteil, dass die gewünschte<br />
Ziel-Kodierung direkt wählbar ist (hier<br />
UTF-8).<br />
Startbedingungen<br />
In einem letzten Schritt wird nun der Block<br />
if __name__ == "__main__":<br />
...<br />
komplett durch musicdb-main.py ersetzt.<br />
Darin wird zunächst eine Instanz des OptionParser<br />
erzeugt und an den Namen parser gebunden.<br />
In den folgenden Zeilen werden die verschiedenen<br />
Optionen definiert, die das Skript<br />
später kennt. Die Methode add_option fügt jeweils<br />
eine weitere Option hinzu und definiert die<br />
© <strong>freiesMagazin</strong> CC-BY-SA 3.0 Ausgabe 03/2011 24