[geloest] copytree Problem mit Leerzeichen in Dateinamen

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
flyingeagle
User
Beiträge: 22
Registriert: Freitag 21. Juli 2006, 12:12

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
Zuletzt geändert von flyingeagle am Dienstag 3. November 2009, 10:48, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?)
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.
lunar

@BlackJack: Natürlich kommt da eine Fehlermeldung, die da lautet: "Die Daten konnten nicht kopiert werden. Das Backup ist fehlgeschlagen." ;)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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... :twisted:
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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) 
the more they change the more they stay the same
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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.

Code: Alles auswählen

print 'Fehler %s: %s' % (e.__class__.__name__, e)
lunar

Es ist also zum Debuggen sinnvoll, den Traceback komplett wegzuwerfen?! Irgendwie entzieht sich diese Argumentation meinem Verständnis ;)
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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 ;)
flyingeagle
User
Beiträge: 22
Registriert: Freitag 21. Juli 2006, 12:12

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
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

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
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
flyingeagle
User
Beiträge: 22
Registriert: Freitag 21. Juli 2006, 12:12

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
Antworten