Seite 1 von 5
Verzeichnisse kopieren
Verfasst: Montag 5. Juli 2010, 16:08
von Py-Prog
Hi,
hat von euch wer ne ahnug wie man Verzeichnise mit Python kopieren kann? Oder muss ich da selber was basteln? :K
Re: Verzeichnise kopieren
Verfasst: Montag 5. Juli 2010, 16:18
von lunar
shutil.copytree
Re: Verzeichnise kopieren
Verfasst: Montag 5. Juli 2010, 16:29
von Py-Prog
Danke, habs ausprobiert, es hat geklappt. (Meine gebete wurden erhört

)
Re: Verzeichnise kopieren
Verfasst: Montag 5. Juli 2010, 16:33
von Py-Prog
Zu früh gefreut, jetzt muss ich noch ne lösung finden die Daten abzugleichen, ohne sie vorher Löschen zu müssen ...
Re: Verzeichnise kopieren
Verfasst: Montag 5. Juli 2010, 16:47
von Dav1d
Löschen zum Abgleichen?
Re: Verzeichnise kopieren
Verfasst: Montag 5. Juli 2010, 16:58
von Py-Prog
Dav1d hat geschrieben:Löschen zum Abgleichen?
Ja, weil sonst ne Fehler meldung kommt weil die Ordner schon existieren. Da weren wir schon beim nächsten problem shutil spukt Fehlermeldungen aus das Eigene Dateien den zugriff verweigern und Ein Pfad nicht gefunden wird.(Und wer ist schuld? :K Windows natürlich!

) Und das kommiste dabei ist aber das trotz der fehlermeldungen alles am zielort angekommen ist!
Und @lunar mit move geht es auch.(Und eingentlich mit fast allem was man in der Datei shutil.py findet...

)
@Dav1d wenn du den inhalt zweier Ordner Löscht sind beide abgeglichen...

Re: Verzeichnise kopieren
Verfasst: Montag 5. Juli 2010, 21:54
von Warhead
Py-Prog hat geschrieben:...
Und @lunar mit move geht es auch.(Und eingentlich mit fast allem was man in der Datei shutil.py findet...

)
...
Naja, lunar hatte copytree angeboten, weil Du ja auch explizit in Deiner Ausgangsfrage nach dem "Kopieren von Verzeichnissen" und nicht dem "Verschieben" gefragt hast

.
Py-Prog hat geschrieben:...
@Dav1d wenn du den inhalt zweier Ordner Löscht sind beide abgeglichen...

...
Und nachts ist's kälter als draussen. Sorry aber ... bitte wie?
Was meinst Du damit genau? Wenn ich den Inhalt zweier Ordner lösche, dann sind die Ordner bestenfalls für ewig und schlimmer futschi-kato und ich beiss mir in die Backen, falls es sich dabei um wichtige Daten handelte und ich keine Backups habe.
Und
verdammte Axt nochmal: es heisst "spu
cken" -> nicht spuken *huhuuu huhuhu huhuuuuu*

.
Zudem ist nicht Windows an dem Malheur schuld, sondern meistens ist es das Unwissen des Entwicklers hinsichtlich der Programmiersprache, Plattform, Dateizugriffe, Rechtekonzepts, etc. pp. - und im übelsten Fallen in allen Punken zugleich.
Re: Verzeichnise kopieren
Verfasst: Dienstag 6. Juli 2010, 18:16
von Py-Prog
Warhead hat geschrieben:Naja, lunar hatte copytree angeboten, weil Du ja auch explizit in Deiner Ausgangsfrage nach dem "Kopieren von Verzeichnissen" und nicht dem "Verschieben" gefragt hast

.
Ich will auch nichts verschieben.
Py-Prog hat geschrieben:...
@Dav1d wenn du den inhalt zweier Ordner Löscht sind beide abgeglichen...

...
Warhead hat geschrieben:Und nachts ist's kälter als draussen. Sorry aber ... bitte wie?
Was meinst Du damit genau? Wenn ich den Inhalt zweier Ordner lösche, dann sind die Ordner bestenfalls für ewig und schlimmer futschi-kato und ich beiss mir in die Backen, falls es sich dabei um wichtige Daten handelte und ich keine Backups habe.
Beide Ordner haben dann doch den gleichen inhalt, nichts. Ausserdem will ich ein Backup-Programm schreiben, und nicht ordner löschen!
Warhead hat geschrieben:
Und
verdammte Axt nochmal: es heisst "spu
cken" -> nicht spuken *huhuuu huhuhu huhuuuuu*

.
Hast du was gegen meine Rechtschreibung?
Warhead hat geschrieben:
Zudem ist nicht Windows an dem Malheur schuld, sondern meistens ist es das Unwissen des Entwicklers hinsichtlich der Programmiersprache, Plattform, Dateizugriffe, Rechtekonzepts, etc. pp. - und im übelsten Fallen in allen Punken zugleich.
Es geht doch mit dem kopieren, aber nur ein mal...
Re: Verzeichnise kopieren
Verfasst: Dienstag 6. Juli 2010, 18:39
von Py-Prog
Für den Fall das es wenn intressiert, hier ist die Fehlermeldung:
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
shutil.move(Pfad, Ziel)
File "C:\Python31\lib\shutil.py", line 276, in move
rmtree(src)
File "C:\Python31\lib\shutil.py", line 230, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python31\lib\shutil.py", line 230, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python31\lib\shutil.py", line 239, in rmtree
onerror(os.rmdir, path, sys.exc_info())
File "C:\Python31\lib\shutil.py", line 237, in rmtree
os.rmdir(path)
WindowsError: [Error 5] Zugriff verweigert: 'D:\\Py-Prog\\Eigene Dateien\\Eigene Bilder'
und
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
shutil.copytree(Pfad, Ziel)
File "C:\Python31\lib\shutil.py", line 160, in copytree
os.makedirs(dst)
File "C:\Python31\lib\os.py", line 143, in makedirs
mkdir(name, mode)
WindowsError: [Error 183] Eine Datei kann nicht erstellt werden, wenn sie bereits vorhanden ist: 'G:\\Backup\\Py-Prog\\'
Re: Verzeichnise kopieren
Verfasst: Mittwoch 7. Juli 2010, 09:16
von ichisich
Willst Du eher ein Backupskript schreiben oder ein richtiges Progrämmchen mit GUI ?
So oder so gibt es ja auch nette "Onboard" Lösungen wie
xcopy für Windows oder
rsync für Unix oder mit Hilfe von
Cygwin auch für Windows die Du in deinem Skript bemühen könntest.
Ansonsten würde ich mir erst ein mal je eine Liste von Quelle und Ziel machen diese nach meinen Kriterien ausdünnen (Quelle ist neuer als Ziel etc ...), dann könntest Du über die Liste iterieren und jedes Zielfile oder Zielverzeichnis temporär umbenennen neu schreiben/kopieren lassen und im Erfolgsfall das temporäre löschen.
Nützlich wäre da die Funktion os.walk() mit der Du rekursiv durch deinen Baum laufen kannst.
Du kannst auch die Exceptions die dein shutil.copytree wirft benutzen um entsprechend auf die Situation zu reagieren, dann kannst Dir die Listen oben sparen. Dazu sind die Exceptions ja auch da.
Vielleicht hilfts aber dein Vorhaben genauer zu beschreiben ..
Vielleicht hilfts aber auch schon so ....
Gruß ich
Re: Verzeichnise kopieren
Verfasst: Montag 12. Juli 2010, 13:30
von Py-Prog
ichisich hat geschrieben:Willst Du eher ein Backupskript schreiben oder ein richtiges Progrämmchen mit GUI ?
Na ja, das eigentliche Programm wird beim system-start ausgeführt und soll die Backups machen, also ohne GUI. Ich mach aber noch nen GUI zum einstellen. (eigentlich beides). Und wie oft noch copytree geht nur einmal!!!
Eine Batch datei dafür zu verwenden ist mir auch schon in den sinn gekommen, nur weis ich nicht wie man Das ausführt und eigentlich wollt ich's mit Python hinkriegen...
Re: Verzeichnise kopieren
Verfasst: Mittwoch 14. Juli 2010, 07:43
von Pekh
Du wolltest wissen, wie man Verzeichnisse kopiert. Man hat es dir gesagt. Dann wolltest du wissen, wie man eine Backup-Lösung hinkriegen könnte. Das du da mit copytree nicht glücklich wirst, hast du ja auch schon festgestellt. Bei Backups kannst du nicht ganze Bäume einfach hin- und herkopieren. Du mußt entweder das Zielverzeichnis vorher leeren, oder aber jede Datei einzeln überprüfen, ob sie überhaupt kopiert werden soll. Und wenn, mußt du sie im Zielverzeichnis halt überschreiben (z.B. durch Löschen und anschließendes Kopieren).
Im Übrigen denke ich, daß du dich etwas im Ton vergreifst. Lies mal genauer, was die anderen vorgeschlagen haben und versuche, es zu verstehen. Gib dich nicht damit zufrieden, wenn es irgendwann funktioniert, sondern versuche zu verstehen, warum und wie es funktioniert. Oder halt nicht funktioniert.
Re: Verzeichnise kopieren
Verfasst: Mittwoch 14. Juli 2010, 09:11
von ichisich
Ok dann mal anders herum gefragt.
Du willst das Backupskript schreiben weil Du gerne Programmierst ?
Oder Du willst das Rad neu erfinden weil Du es nicht besser weißt ?
Im ersteren Fall versteh ich nicht warum Du mit all den Vorschlägen nicht weiter kommst, bzw weiterkommen willst. Alleine
shutil copytree bei Google gibt einem etliche Links zurück die genau dein Problem behandeln. Im zweiten Fall währe da die Funktion
subprozess mit der Du externe Programme aufrufen kannst (auch Batchfiles).
XCOPY hatte ich ja schon erwähnt. Ein recht mächtiges Tool wäre da noch
Robocopy. Mit beiden kannst Du dann den Kompromiss gehen zwischen was selber Coden und auf erfundene Räder zurück greifen.
Würde dann auch zu deiner Signatur passen

:K
Rock on ...
Re: Verzeichnisse kopieren
Verfasst: Mittwoch 14. Juli 2010, 15:27
von Dav1d
Es gibt auch noch die zipfile Lib um die Backups zu komprimieren, das funktioniert aber nicht so toll, da bei mir die Lib immer ab 3gb größe des zipfiles abschmiert
Re: Verzeichnisse kopieren
Verfasst: Mittwoch 14. Juli 2010, 17:29
von Py-Prog
@Dav1d danke für die Idee, komprimieren ist echt keine Schlechte Idee.
Re: Verzeichnisse kopieren
Verfasst: Mittwoch 14. Juli 2010, 17:32
von Dav1d
Np
Ich habs vorher vergessen zu schreiben, In: A byte of Python, ist ein Beispielcode zum Backups machen (
http://abop-german.berlios.de/read/the-solution.html).
Man sollte os.system mit subprocess.call oder subprocess.Popen ersetzten
Re: Verzeichnisse kopieren
Verfasst: Dienstag 20. Juli 2010, 15:25
von Py-Prog
Also dass mit dem einlesen der variablen Pfad und Ziel aus den Dateien hab ich hingekriegt aber jetzt geht die funktion zum kopieren nicht:
Code: Alles auswählen
def Kopieren(path, ziel):
for i in os.listdir(path):
if os.path.isdir(path+i) and os.path.exists(ziel+i) == False:
os.mkdir(ziel+i)
Kopieren(path+i, ziel+i)
elif os.path.isdir(path+i) and os.path.exists(ziel+i):
Kopieren(path+i, ziel+i)
elif os.path.isfile(path+i):
filesave(ziel+i, fileopen(path+i))
else:
print(i)
mit print(i) sieht man alle Verzeichniste/Dateien die
nicht kopiert wurden. (Also alle)
Re: Verzeichnisse kopieren
Verfasst: Dienstag 20. Juli 2010, 15:28
von Hyperion
Pfade nicht per "+" sondern mit os.path.join() zusammensetzen.
Re: Verzeichnisse kopieren
Verfasst: Dienstag 20. Juli 2010, 15:30
von BlackJack
Pfade setzt man nicht mit ``+`` zusammen. Schau Dir doch einfach mal an was *dabei* herauskommt, dann sollte klar sein warum keine der Bedingungen zutrifft. Und `i` ist ein sehr schlechter Name für eine Zeichenkette.
Re: Verzeichnisse kopieren
Verfasst: Dienstag 20. Juli 2010, 16:13
von Py-Prog
Last mich raten ich hab (wieder mal) vergessen das da noch '\\' dazugehört.