Problem mit os.rename

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lobo
User
Beiträge: 29
Registriert: Sonntag 25. August 2002, 16:10
Wohnort: bei Augsburg

Dienstag 8. Oktober 2002, 19:50

Ich hab so wie es scheint ein Problem mit os.rename. Mein OS ist Linux.

src = './sample.mp3'
dst = '/samplepath/'

Code: Alles auswählen

def cleanup(src, dst):
        #Dateiname aus Pfad extrahieren
        filename = os.path.basename(src)
        #Zielpfad
        dst = dst + filename
        
        print src + " wird nach " + dst + " verschoben!"

        os.rename(src,dst)
Das Problem ist nur, dass die Print ausgabe src und dst korrekt angibt, nur heisst ./sample.mp3 nach os.rename dann /samplepath/?sample.mp3 . Woher kommt das Fragezeichen vor sample.mp3 nach dem Umbenennen, oder besser gesagt, wie bekomme ich es weg ??

Gruss

Jochen
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Dienstag 8. Oktober 2002, 20:20

rename(src, dst)
Rename the file or directory src to dst. If dst is a directory, OSError will be raised. On Unix, if dst exists and is a file, it will be removed silently if the user has permission. The operation may fail on some Unix flavors if src and dst are on different filesystems. If successful, the renaming will be an atomic operation (this is a POSIX requirement). On Windows, if dst already exists, OSError will be raised even if it is a file; there may be no way to implement an atomic rename when dst names an existing file. Availability: Macintosh, Unix, Windows.
Ich gehe mal davon aus, daß du Linux benutzt, oder? Ist die Ausgabe von Print wirklich "sauber"? Leite die doch mal in eine Datei um und schau sie mit vi an. Sind da nicht vielleicht noch nicht sichtbare Sonderzeichen?

Versuch es mal so

Code: Alles auswählen

def cleanup(src, dst):
        #Dateiname aus Pfad extrahieren
        # filename = os.path.basename(src)
        #Zielpfad
        dstFile = "%s/%s" % (dst, os.path.basename(src))
       
        print "%s wird nach %s verschoben!" % (src, dstFile)
        print len(src)
        print len(dstFile)

        os.rename(src,dstFile) 
Hans
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Dienstag 8. Oktober 2002, 21:07

Hallo Jochen!
lobo hat geschrieben:Ich hab so wie es scheint ein Problem mit os.rename. Mein OS ist Linux.
Ergänzend zu Hans' Vermutung mit dem Sonderzeichen:
Liest Du dst aus einer Datei oder z.B. via popen() von der stdout ein? Dann nehme ich mal an, dass dahinter noch ein '\n' hängt. os.rename('./bla','/foo/bar/\n') erzeugt nämlich so eine ?-Datei.

Jan
lobo
User
Beiträge: 29
Registriert: Sonntag 25. August 2002, 16:10
Wohnort: bei Augsburg

Dienstag 8. Oktober 2002, 21:19

Voges du hattest recht, ein

dst = dst.strip()
dst = dst + filename

funktioniert dann.

Ich hatte vorher schon mit strip getestet, hatte es aber an die falsche Stelle gesetzt :oops:


Vielen Danke für eure Bemühung.

Gruss

Jochen

p.s. Der Code ist Teil einer Mp3 und Ogg Dateien Putze, die diese Dateien anhand des ID3-Tag Genres und einer Config-Datei in Verzeichnisse einsortiert. Wenn ich mit dem Code zufrieden bin und alle Funktionen drinn sind, werd ich es hier bekannt geben ;-)
Antworten