Hi,
hat von euch wer ne ahnug wie man Verzeichnise mit Python kopieren kann? Oder muss ich da selber was basteln? :K
Verzeichnisse kopieren
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.
Wer Rechtschreibfehler findet darf sie behalten.
Löschen zum Abgleichen?
the more they change the more they stay the same
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!Dav1d hat geschrieben:Löschen zum Abgleichen?
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...
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
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:...
Und @lunar mit move geht es auch.(Und eingentlich mit fast allem was man in der Datei shutil.py findet... )
...
Und nachts ist's kälter als draussen. Sorry aber ... bitte wie?Py-Prog hat geschrieben:...
@Dav1d wenn du den inhalt zweier Ordner Löscht sind beide abgeglichen...
...
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* .
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?
Ich will auch nichts verschieben.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 .
Py-Prog hat geschrieben:...
@Dav1d wenn du den inhalt zweier Ordner Löscht sind beide abgeglichen...
...
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 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.
Hast du was gegen meine Rechtschreibung?Warhead hat geschrieben: Und verdammte Axt nochmal: es heisst "spucken" -> nicht spuken *huhuuu huhuhu huhuuuuu* .
Es geht doch mit dem kopieren, aber nur ein mal...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.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
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\\'
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.
Wer Rechtschreibfehler findet darf sie behalten.
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
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
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!!!ichisich hat geschrieben:Willst Du eher ein Backupskript schreiben oder ein richtiges Progrämmchen mit GUI ?
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.
Wer Rechtschreibfehler findet darf sie behalten.
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.
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.
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 ...
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 ...
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
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
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
Also dass mit dem einlesen der variablen Pfad und Ziel aus den Dateien hab ich hingekriegt aber jetzt geht die funktion zum kopieren nicht:
mit print(i) sieht man alle Verzeichniste/Dateien die nicht kopiert wurden. (Also alle)
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)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
- 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
assert encoding_kapiert
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.