27.10.2013 Aufrufe

PDF-Version - freiesMagazin

PDF-Version - freiesMagazin

PDF-Version - freiesMagazin

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!