#!/usr/bin/python #-*- coding: utf8 -*- #--------------------------------------------------------------------------- # m3u2cp.py mit diesem Programm können Teile einer MP3 Sammlung kopiert werden. # Copyright (c) 2007 Otmar Schmid # Dieses Programm ist freie Software. Sie können es unter den Bedingungen # der GNU General Public License, wie von der Free Software Foundation # veröffentlicht, weitergeben und/oder modifizieren, entweder gemäss # Version 3 der Lizenz oder jeder späteren Version. # Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es # Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne # die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN # BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. # Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem # Programm erhalten haben. Falls nicht, siehe . #--------------------------------------------------------------------------- import optparse import os import sys #--------------------------------------------------------------------------- version = '2006-08-14' #--------------------------------------------------------------------------- def get_titel (komplettpfad): # letzten '/' suchen index = 0 while index < len (komplettpfad): if '/' == komplettpfad [index]: idx = index + 1 index = index + 1 return komplettpfad[idx:] #--------------------------------------------------------------------------- def get_album (komplettpfad): index = len (komplettpfad) while index > 0: index = index - 1 if '/' == komplettpfad [index]: idxlast = index index = 0 index = idxlast while index > 0: index = index - 1 if '/' == komplettpfad [index]: idxvor = index + 1 index = 0 return komplettpfad[idxvor:idxlast] #--------------------------------------------------------------------------- def get_interpret (komplettpfad): index = len (komplettpfad) while index > 0: index = index - 1 if '/' == komplettpfad [index]: idxlast = index index = 0 index = idxlast while index > 0: index = index - 1 if '/' == komplettpfad [index]: idxvor = index index = 0 index = idxvor while index > 0: index = index - 1 if '/' == komplettpfad [index]: idxvorvor = index + 1 index = 0 return komplettpfad[idxvorvor:idxvor] #--------------------------------------------------------------------------- def get_restpfad (komplettpfad): index = len (komplettpfad) while index > 0: index = index - 1 if '/' == komplettpfad [index]: idxlast = index index = 0 index = idxlast while index > 0: index = index - 1 if '/' == komplettpfad [index]: idxvor = index index = 0 index = idxvor while index > 0: index = index - 1 if '/' == komplettpfad [index]: idxvorvor = index index = 0 return komplettpfad[0:idxvorvor] #--------------------------------------------------------------------------- def get_titelnum (titel): try: num = int (titel[0:2]) except: num = 0 if num < 10: str1 = '0' + str (num) else: str1 = str (num) return str1 #--------------------------------------------------------------------------- def m3ubearbeiten (debug, anzahlCD, echo, sort, inFile, outPfad): # File einlesen try: f1 = open (inFile, "r") except: print 'Fehler: File ', inFile, 'nicht gefunden !' print 'Fehler: File "%s" nicht gefunden !' % inFile print 'Fehler: File "%s" nicht gefunden !, outPfad = %s' % (inFile, outPfad) return anzahl = 0; while 1: zeile = f1.readline() if zeile == "": break if zeile [0] == "/": # alle cr und lf entfernen buf2 = "" index = 0 while index < len (zeile): ch = zeile [index] if not ((ch == "\r") or (ch == "\n")): buf2 = buf2 + ch index = index + 1 #print 'buf2:', buf2 if debug == 1: print 'Titel :', get_titel (buf2) print 'Album :', get_album (buf2) print 'Interpret:', get_interpret (buf2) print 'RestPfad :', get_restpfad (buf2) print titel = get_titel (buf2) album = get_album (buf2) interpret = get_interpret (buf2) restpfad = get_restpfad (buf2) if outPfad [-1] == '/': pfad = outPfad + 'musik_cd' + str (anzahl + 1) else: pfad = outPfad + '/musik_cd' + str (anzahl + 1) if debug == 2: print 'filename:', titel if debug == 3: print 'filename:', titel, ' \r', if echo == 1: print titel if echo == 2: print interpret + '/' + album + '/' + titel if sort == 0: # alle titel im gleichen Verzeichnis os.system ('mkdir -p "' + pfad + '"') os.system ('cp "' + buf2 + '" "' + pfad + '/' + titel + '"') if sort == 1: # alle titel im Verzeichnis 00 .. 99 num = get_titelnum (titel) os.system ('mkdir -p "' + pfad + '/' + num + '"') os.system ('cp "' + buf2 + '" "' + pfad + '/' + num + '/' + titel + '"') if sort == 2: # speichern in album/titel os.system ('mkdir -p "' + pfad + '/' + album + '"') os.system ('cp "' + buf2 + '" "' + pfad + '/' + album + '/' + titel + '"') if sort == 3: # speichern in interpret/titel os.system ('mkdir -p "' + pfad + '/' + interpret + '"') os.system ('cp "' + buf2 + '" "' + pfad + '/' + interpret + '/' + titel + '"') if sort == 4: # speichern in interpret/album/titel os.system ('mkdir -p "' + pfad + '/' + interpret + '/' + album + '"') os.system ('cp "' + buf2 + '" "' + pfad + '/' + interpret + '/' + album + '/' + titel + '"') if sort == 5: # 1:1 kopie os.system ('mkdir -p "' + pfad + '/' + restpfad + '/' + interpret + '/' + album + '"') os.system ('cp "' + buf2 + '" "' + pfad + buf2 + '"') anzahl = (anzahl + 1) % int (anzahlCD) f1.close () if debug == 3: print return #--------------------------------------------------------------------------- def main(): usage = "usage: %prog [options] m3u-infile out-pfad" parser = optparse.OptionParser(usage) parser.add_option("-a", "--anz", dest="anzahl_cd", default=1, metavar="ZAHL", action="store", help="Anzahl CD (directories) die erzeugt werden") parser.add_option("-d", "--deb", dest="debug", type="int", default=0, metavar="ZAHL", action="store", help="""debug=0: keine Ausgaben (default) debug=1: Titel Album Interpret debug=2: Titel (einzeilig)""") parser.add_option("-e", "--echo", dest="echo", type="int", default=1, metavar="ZAHL", action="store", help="""Ausgaben echo=0: keine Ausgaben echo=1: Titel (default) echo=2: Interpret/Album/Titel""") parser.add_option("-s", "--sort", dest="sort", type="int", default=4, metavar="ZAHL", action="store", help="""vorgabe: .../interpret/album/titel sort=0: alle titel im gleichen Verzeichnis sort=1: alle titel im Verzeichnis 00 .. 99 sort=2: speichern in album/titel sort=3: speichern in interpret/titel sort=4: speichern in interpret/album/titel (default) sort=5: 1:1 kopie""") parser.add_option("-v", "--version", dest="version", default=False, action="store_true", help="print program versions and exit") (options, args) = parser.parse_args() if options.version: print 'm3u2cp.py (%s) - MP3 kopieren mit Playliste (c) Otmar Schmid' % version sys.exit(0) if len(args) != 2: parser.error("incorrect number of arguments") sys.exit(0) m3ubearbeiten (options.debug, options.anzahl_cd, options.echo, options.sort, args [0], args [1]) #--------------------------------------------------------------------------- if __name__ == "__main__": main() #---------------------------------------------------------------------------