Das deutsche Python-Forum

Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Fr Sep 03, 2010 02:07

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: auto_renamer -> Dateinamen für's Internet cleanen...
BeitragVerfasst: Di Jul 12, 2005 20:42 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
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!

Code:
#!/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()

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 01, 2005 17:37 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Unter Linux klappt ein os.walk("") nicht, mit os.walk(".") aber schon ;)

Also es muß die Zeile:
Code:
        for root,dirs,files in os.walk(""):

durch
Code:
        for root,dirs,files in os.walk("."):

getauscht werden.

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de