Seite 1 von 1
[geloest] copytree Problem mit Leerzeichen in Dateinamen
Verfasst: Sonntag 1. November 2009, 20:54
von flyingeagle
Hallo,
ich versuche mit shutil.copytree ein Verzeichnis komplett zu kopieren.
Code: Alles auswählen
oFolders = oSourceFile.readlines()
for sFolder in oFolders:
try:
shutil.copytree(sFolder, os.path.join(sDestPath, sTime + '_Sicherung', os.path.basename(sFolder)))
print 'Die Daten konnten kopiert werden. Das Backup wurde erfolgreich erstellt.'
except:
print 'Die Daten konnten nicht kopiert werden. Das Backup ist fehlgeschlagen.'
Klappt soweit auch ganz gut nur bei Verzeichnissen mit Leerzeichen im Namen klappt es leider nicht.
Mein aktuelles Problem ist der Ordner "Eigene Dateien" unter Windows aber das wird sicherlich auch noch bei anderen Verzeichnissen auftauchen.
Kann mir jemand sagen wie ich das Problem umschiffen kann?!
Gruss Martin
Re: copytree Problem mit Leerzeichen in Dateinamen
Verfasst: Sonntag 1. November 2009, 21:50
von Hyperion
flyingeagle hat geschrieben:
Klappt soweit auch ganz gut nur bei Verzeichnissen mit Leerzeichen im Namen klappt es leider nicht.
"Klappt nicht" bedeutet genau was? (Fehlermeldung?)
Verfasst: Sonntag 1. November 2009, 23:00
von BlackJack
@Hyperion: Was erwartest Du denn!? Es werden *alle* Ausnahmen "behandelt", aber nicht geschaut was es für eine ist. Da kommt keine Fehlermeldung.
@flyingeagle: ``except`` ohne eine konkrete Ausnahmen, auch wenn es nur die Allgemeinste ist, sollte man genau deswegen nicht machen.
Verfasst: Montag 2. November 2009, 08:17
von lunar
@BlackJack: Natürlich kommt da eine Fehlermeldung, die da lautet: "Die Daten konnten nicht kopiert werden. Das Backup ist fehlgeschlagen."

Verfasst: Montag 2. November 2009, 08:24
von mkesper
lunar hat geschrieben:@BlackJack: Natürlich kommt da eine Fehlermeldung, die da lautet: "Die Daten konnten nicht kopiert werden. Das Backup ist fehlgeschlagen."

Nein, die Meldung kommt erst beim Versuch, das Backup wieder einzuspielen...

Verfasst: Montag 2. November 2009, 09:40
von Dav1d
Das Beste wäre du würdest nur die Fehler abfangen die du kennst!, also Fehler die schonmal aufgetreten sind
es geht aber auch so:
Code: Alles auswählen
oFolders = oSourceFile.readlines()
for sFolder in oFolders:
try:
shutil.copytree(sFolder, os.path.join(sDestPath, sTime + '_Sicherung', os.path.basename(sFolder)))
print 'Die Daten konnten kopiert werden. Das Backup wurde erfolgreich erstellt.'
except Exception, e:
print 'Die Daten konnten nicht kopiert werden. Das Backup ist fehlgeschlagen. Fehler: %s' % (e)
Verfasst: Montag 2. November 2009, 10:13
von ms4py
Wenn dann so, sonst kann man mit der Meldung trotzdem oft nichts anfangen. Dies sollte trotzdem nicht so eingesetzt werden, sondern die Fehler einzeln abgefangen werden. Zum Debuggen ist das aber evt. manchmal sinnvoll.
Verfasst: Montag 2. November 2009, 13:36
von lunar
Es ist also zum Debuggen
sinnvoll, den Traceback komplett wegzuwerfen?! Irgendwie entzieht sich diese Argumentation meinem Verständnis

Verfasst: Montag 2. November 2009, 13:43
von ms4py
lunar hat geschrieben:Es ist also zum Debuggen
sinnvoll, den Traceback komplett wegzuwerfen?! Irgendwie entzieht sich diese Argumentation meinem Verständnis

"
eventuell manchmal"
Bei meinem Funktionsparser (s.
http://www.python-forum.de/topic-20264.html ) bringt mir ein Traceback z.B. gar nichts

Verfasst: Montag 2. November 2009, 15:48
von flyingeagle
Hallo,
natuerlich hatte ich zu wenig informationen
Die Fehlermeldung lautet
Code: Alles auswählen
OSError: [Errno 2] No such file or directory: 'S:\\20091102-153141_Sicherung\\Eigene Dateien'
Eigentlich sollte copytree ja genau das Verzeichnis anlegen. Verzeichnisse ohne Leerzeichen lassen sich mit dem Schnipsel ohne weiteres kopieren, erst wenn ein Verzeichnis ein Leerzeichen hat knallts.
Gruss Martin
Verfasst: Montag 2. November 2009, 15:56
von INFACT
Ich weiß nicht obs klappt aber versuch mal eins von den dreien:
Code: Alles auswählen
1.
tree = "... Eigene Dateien "
tree = tree.replace(" ", "\ ")
2.
tree = "... Eigene Dateien "
tree = tree.replace(" ", "\\ ")
3.
shutil.copytree('"%s"' %tree)
Natürlich musst du beim copytree den anderen Pfad ergänzen
Verfasst: Montag 2. November 2009, 17:13
von flyingeagle
Hi
danke fuer die Antwort aber leider hat das auch nichts geholfen.
Habe es jetzt so gemacht:
Code: Alles auswählen
oFolders = oSourceFile.readlines()
for sFolder in oFolders:
if (os.path.exists(sDestPath)):
sDestPath = os.path.join(sDestPath, sTime + '_Sicherung')
os.mkdir(sDestPath)
if (os.path.exists(sDestPath)):
sDestPath = os.path.join(sDestPath, os.path.basename(sFolder))
shutil.copytree(sFolder, sDestPath)
Gruss Martin