auto_renamer -> Dateinamen für's Internet cleanen...
Verfasst: Dienstag 12. Juli 2005, 19:42
Brauchte ein kleines Skript, welches einige Dateinamen für's Internet cleant.
d.h. alle Umlaute und Leerzeichen umwandeln.
Mein Skript macht das im Aktuellen Verzeichniss und allen Unterverzeichnissen!
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()