Verzeichnisse kopieren

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.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Hi,
hat von euch wer ne ahnug wie man Verzeichnise mit Python kopieren kann? Oder muss ich da selber was basteln? :K
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Danke, habs ausprobiert, es hat geklappt. (Meine gebete wurden erhört :lol: )
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Zu früh gefreut, jetzt muss ich noch ne lösung finden die Daten abzugleichen, ohne sie vorher Löschen zu müssen ...
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Löschen zum Abgleichen?
the more they change the more they stay the same
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

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! :roll: ) 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... :wink: )
@Dav1d wenn du den inhalt zweier Ordner Löscht sind beide abgeglichen... :wink:
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Warhead
User
Beiträge: 15
Registriert: Montag 28. Juni 2010, 12:54

Py-Prog hat geschrieben:...
Und @lunar mit move geht es auch.(Und eingentlich mit fast allem was man in der Datei shutil.py findet... :wink: )
...
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... :wink:
...
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 "spucken" -> nicht spuken *huhuuu huhuhu huhuuuuu* :shock: .

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.
When altering one's own mind becomes as easy as programming a computer… What does it mean to be human?
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

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... :wink:
...
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 "spucken" -> nicht spuken *huhuuu huhuhu huhuuuuu* :shock: .
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...
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

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\\'
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

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
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

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...
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

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

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
the more they change the more they stay the same
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

@Dav1d danke für die Idee, komprimieren ist echt keine Schlechte Idee.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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
the more they change the more they stay the same
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

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)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Pfade nicht per "+" sondern mit os.path.join() zusammensetzen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
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.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Last mich raten ich hab (wieder mal) vergessen das da noch '\\' dazugehört.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Antworten