da es mich immer sehr stört, dass bei allen Alben, die ich von Jamendo herunterlade, lauter *.txt Dateien drinnen sind und das cover immer umbenannt werden müsste, hab ich mal ein Programm geschrieben, dass mir die Cover in cover.jpg umbenennt und die Textdateien löscht:
Code: Alles auswählen
#!/usr/bin/python
#-*- encoding: utf8 -*-
'''
TODO:
-Methode zum Ordner umbennen
o Nur noch [Artist] - [Album]
-Methode zum Ordnerstruktur aendern
o Ordner umbennen(s.o.)
o Order fuer Interpret mit Unterordnern fuer die Alben([Artist]/[Album]
-GUI
'''
__version__='0.0.1a'
__autor__='Tobias Höbel'
import os
import sys
import re
class JTE:
#--------------------------------------------------------------------------
def __init__(self):
'''
sets up the variables, check the given arguments and do the
operations.
'''
self.args=dict()
self.args['dr']=False
self.args['cr']=False
self.args['tdel']=False
self.homedir=os.path.join(os.environ.get('HOME'))
self.trash_path=os.path.join(self.homedir,'.Trash')
self.check_dir(self.trash_path)
self.check_dir(sys.argv[-1],False,True)
self.check_arguments()
os.path.walk(sys.argv[-1],self.file_operations,None)
#--------------------------------------------------------------------------
def check_arguments(self):
'''
checks witch arguments are given
'''
#VERSUCH OHNE REGEX AUSZUKOMMEN, UM DIE ARGUMENTE ZU ÜBERPRÜFEN.
#WIRD NOCH AUSGEBAUT
#for arg in sys.argv:
# if arg.startswith('-'):
# if arg[1:]=='cr':
# self.args['cr']=True
# try:
# self.args['cover_name']=arg.split('=')[1]
# except KeyError:
# self.args['cover_name']='cover'
# if arg[1:]=='dr':
# self.args['dr']=True
# try:
# self.args['dr_sa']=arg.split('=')[1]
# except KeyError:
# self.args['dr_sa']=False
# if arg[1:]=='tdel':
# self.args['tdel']=True
# elif arg.startswith('--'):
arg=' '.join(sys.argv)
cr=re.compile(r'(-cr|--coverrename)(=(?P<opt>[\w\d]+))?',
re.IGNORECASE).search(arg)
tdel=re.compile(r'(-tdel|--txtdelete)',
re.IGNORECASE).search(arg)
dr=re.compile(r'(-dr|--dirrename)(=(?P<opt>sa))?',
re.IGNORECASE).search(arg)
if cr:
self.args['cr']=True
if cr.group('opt'):
self.args['cover_name']=cr.group('opt')
if tdel:
self.args['tdel']=True
if dr:
self.args['dr']=True
self.args['dr_type']=dr.group('opt')
if len(sys.argv) < 2:
self.show_help()
raise SystemExit,'Es wurden nicht genuegend Argumente uebergeben.'
if not self.args['cover_name'].endswith('.jpg'):
self.args['cover_name']+='.jpg'
#--------------------------------------------------------------------------
def show_help(self):
'''
shows the help.
'''
print ('Aufruf: '+sys.argv[0]+' [OPTION] Verzeichniss\n'
'Rekursives aendern der Dateien in den Unterordnern des '
'uebergebenen Ordners.\n'
'Moegliche Optionen:\n'
' -tdel, --txtdelete\t\tLoeschen der *.txt Dateien in '
'den Unterordnern.\n'
' -cr[=NAME] --coverrename[=NAME]\tUmbenennung der Bilddatei in'
' cover.jpg oder bei Angabe von NAME in NAME.jpg.\n'
' -dr[--sa], --dirrename[--sa]\t\tUmbenennung der Ordner in '
'[Arist] - [Album]. Falls "--sa" mit angegeben wird, wird fuer '
'jeden Interpreten jeweils ein Ordner mit Unterordnern fuer jedes '
'Album erstellt.\n')
#--------------------------------------------------------------------------
def check_dir(self,dir,create=True,force_exist=False):
'''
checks wether the given path exitsts and if it's a directory.
if the check is succesful it return true or false.
if the directory doesn't exist it can be created or exit.
'''
if not os.path.exists(dir) and not os.path.isdir(dir):
if force_exist:
raise (SystemExit, 'Pfad '+dir+' existiert nicht')
else:
if create:
os.mkdir(dir)
self.check_dir(dir)
return False
else:
return True
#--------------------------------------------------------------------------
# def get_dirs(self):
# dirs=[]
# for dir in os.listdir('.'):
# if os.path.isdir(dir):
# dirs.append(dir)
# if not dirs:
# print 'leer'
# return dirs
#--------------------------------------------------------------------------
def file_operations(self,arg,dirname,names):
'''
performs the operations which should be done.
'''
path=os.path.join(sys.argv[-1],dirname)
for name in names:
if name.endswith('.txt') and self.args['tdel']:
os.remove(os.path.join(path,name))
if name.endswith('jpg') and self.args['cr']:
os.rename(os.path.join(path,name),
os.path.join(path,self.args['cover_name']))
#--------------------------------------------------------------------------
def main():
if __name__=='__main__':
jte=JTE():
main()
Was ich noch vorhab:
- Ein GUI
- Ordnerstrukturänderungen(Artist - Album) oder ein Ordner pro Artist (Artist/Album)
- Erstellen von Playlisten
Die Auskommentierten Codestellen sind überbleibsel von fehlgeschlagenen Versuchen oder noch nich ausgereifte Versuche (z.B. Die Argumente mit Stringoperationen auszuwerten und nich extra deswegen das Modul re hernehmen zu müssen).
Dann sagt mir mal, was ihr von dem Code haltet und was ich verbessern könnte/sollte.
Lg Tobi