linux-l: Problem mit Python und regulaeren Ausdruecken

Fabian Walk fabian at narf.in-berlin.de
Di Apr 24 12:11:57 CEST 2001


Hallo,
heute brauche ich mal einen Rat von den Python-Experten unter euch.
Wahrscheinlich ist mein Problem trivial, aber ich komme einfach nicht
weiter.
Ich bin dabei einen Dateinamenkonverter zu schreiben der alle Leer-
zeichen durch "_" ersätzt und alle Sonderzeichen wie "|  & ; ( ) < > []"
aus dem Dateinamen entfernt, diesen in Kleinbuchstaben umwandelt und die 
Datei umbenennt.
Mein Problem ist nun einen einigermassen günstigen Weg zu finden der
die entsprechenden Umwandlungen durchführt. Ich habe es mit dem re Modul
von Python probiert, aber mein regulärer Ausdruck hat nicht den erwünschten
Erfolg. Wie müsste ich den Ausdruck formulieren das die Sonderzeichen
gefrunden und entfernt werden? Ich hab es erstmal mit re.match probiert
um zu testen was ob was gefunden wird zu ersetzen wollte ich dann 
re.sub verwenden. Gibt es vieleicht noch eine bessere Methode als mit
regulären Ausdrücken?

Hier der Auszug aus meinem Programm:
------ snip ------
def renamefile(file):
    rexp = re.compile("(\||\&|;|\(|\)|<|>|[|]| )+")
    
    file_path = os.path.dirname(file)
    file_alt = os.path.basename(file)
    file_neu = os.path.normcase(string.lower(file_alt))
    if v_flag == 1:
        print file_alt + " --> " + file_neu
        print rexp.search(file_neu)
    if i_flag == 0:
        try:
#            os.rename(os.path.join(file_path,file_alt), os.path.join(file_path,file_neu))
        except IOError:
            usage("File rename failed")
    if os.path.exists(os.path.join(file_path,file_neu)):
        print ("File exist")
        return
    else:
        try:
#            os.rename(os.path.join(file_path,file_alt), os.path.join(file_path,file_neu))
        except IOError:
            usage("File rename failed")
------ snap ------

Danke im Vorraus für eure Hilfe
Bye Fabian
-- 
E-Mailadresse  : Fabian Walk <fabian at tuxianer.de>
Homepage       : http://www.tuxianer.de/
ICQ UIN        : 2884452
Key fingerprint: 9324 8559 621A 8821 17FE  71A9 BE33 DA36 EFB6 D8E9




Mehr Informationen über die Mailingliste linux-l