d.h. alle Umlaute und Leerzeichen umwandeln.
Mein Skript macht das im Aktuellen Verzeichniss und allen Unterverzeichnissen!
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: ISO-8859-1 -*-
import os, sys, urllib
rules = [
(" ", "_"),
("ä", "ae"),
("ö", "oe"),
("ü", "ue"),
("Ä", "Ae"),
("Ö", "Oe"),
("Ü", "Ue"),
("ß", "ss"),
]
class auto_renamer:
def __init__( self ):
self.cwd = os.getcwd()
self.rename_dict = {}
def go( self ):
print "--- Aktuelles Verzeichnis: %s ---" % self.cwd
print "scanne...",
dir_numbers = self.make_rename_dict()
print "%s Verzeichnisse durchsucht." % dir_numbers
print
if len(self.rename_dict) == 0:
print "Keine Dateien müßen umbenannt werden!"
sys.exit()
self.print_result()
print
answer = raw_input("Sollen Dateien umbenannt werden? [j/n]")
if answer != "j":
sys.exit()
self.rename_files()
def make_rename_dict( self ):
dir_numbers = 0
for root,dirs,files in os.walk(""):
self.check_files( os.path.join( self.cwd, root ), files )
dir_numbers += 1
return dir_numbers
def check_files( self, work_dir, filelist ):
for file_name in filelist:
if urllib.quote( file_name ) == file_name:
# Gibt nix zu ersetzten!
continue
clean_filename = self.clean_filename( file_name )
if urllib.quote( clean_filename ) != clean_filename:
print ">>> Error, urllib.quote():"
print urllib.quote( clean_filename )
continue
self.rename_dict[ os.path.join( work_dir, file_name ) ] = clean_filename
def clean_filename( self, filename ):
for rule in rules:
filename = filename.replace( rule[0], rule[1] )
return filename
def print_result( self ):
for source, destination in self.rename_dict.iteritems():
print source
print "-->", destination
def rename_files( self ):
for source, destination in self.rename_dict.iteritems():
dir,name = os.path.split( source )
try:
os.chdir( dir )
print "rename: %s -> %s" % ( name, destination )
os.rename( name, destination )
print "OK"
except Exception, e:
print "rename error:", e
# Zum Startverzeichnis wechseln
os.chdir( self.cwd )
if __name__ == "__main__":
auto_renamer().go()