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
Verzeichnisse kopieren
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.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nein du sollst nicht raten, genauso solltest du keine Zeichen in den Quelltext streuen und hoffen dass es klappt, sondern einfach anschauen, was da steht (`print`, `logging`, `Debugger`, ...) dir dann ueberlegen wie es dazu kam und dann das richtige Gegenmittel waehlen.Py-Prog hat geschrieben:Last mich raten ich hab (wieder mal) vergessen das da noch '\\' dazugehört.
Da ist keine Magie dabei.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Ha, eigentlich geht es aber mich würde nur noch interesieren warum sind viele (nicht alle) dateien 0kb groß (also leer)?
Das ist die Fehlermeldung:
(kommt nur wein ich bei fileopen() die try: anweisung weglasse.
Das ist die Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Adrian\Desktop\Fastbackup.auto.pyw", line 91, in <module>
backup('D:\\Py-Prog\\Python\\Projekte\\Backup\\Backupinfo\\')
File "C:\Dokumente und Einstellungen\Py-Prog\Desktop\backup.auto.pyw", line 36, in backup
Kopieren(Pfad, Ziel)
File "C:\Dokumente und Einstellungen\Py-Prog\Desktop\Fastbackup.auto.pyw", line 87, in Kopieren
Kopieren(path+'\\'+i, ziel+'\\'+i)
File "C:\Dokumente und Einstellungen\Py-Prog\Desktop\backup.auto.pyw", line 87, in Kopieren
Kopieren(path+'\\'+i, ziel+'\\'+i)
File "C:\Dokumente und Einstellungen\Py-Prog\Desktop\backup.auto.pyw", line 87, in Kopieren
Kopieren(path+'\\'+i, ziel+'\\'+i)
File "C:\Dokumente und Einstellungen\Py-Prog\Desktop\backup.auto.pyw", line 89, in Kopieren
filesave(ziel+'\\'+i, fileopen(path+'\\'+i))
File "C:\Dokumente und Einstellungen\Py-Prog\Desktop\backup.auto.pyw", line 68, in fileopen
dtt=f.read()
File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 320: character maps to <undefined>
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
@Py-Prog: Am Traceback sieht man ziemlich deutlich, dass Du nicht `os.path.join()` verwendest sondern jetzt ``pfad + '\\' + i`` -- sag mal warum sollte man Dir noch helfen wollen, wenn Du entgegen der Ratschläge doch alles ganz furchtbar anders machst!?
@BlackJack ich hab's jetzt mit join gemacht und jetzt kommt aber wieder das gleiche, nur mit den kleinen änderungen.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
Kann es sein, dass du aus irgendeinem kuriosen Grund versuchst, den Dateiinhalt selber auszulesen und zu schreiben, statt die passenden Funktionen aus der Python-Library zu verwenden?Py-Prog hat geschrieben:Code: Alles auswählen
File "C:\Dokumente und Einstellungen\Py-Prog\Desktop\backup.auto.pyw", line 68, in fileopen dtt=f.read() File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 320: character maps to <undefined>
Wenn du meinst das ich für das öffnen und speichern eine eingene funktion definiert hab dan ja.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Und warum oeffnest du die Dateien, wenn du sie eigtl kopieren willst? Es gibt schliesslich `shutil`, `os`, ... _darauf_ wollte /me raus
Warum du das benutzen willst ist folgendes: Wenn du die Dateien als Textdateien öffnest, wird der Inhalt zu Unicode-Objekten dekodiert, da du die Dateien nicht explizit mit einem Encoding oeffnest (zb mit `codecs.open`) wird mit dem System-Encoding gearbeitet: `cp1252`. Deine Dateien scheinen inkompatible Encodings (z.b. UTF-8 oder UTF-16) zu nutzen und dann ergibt sich dein Fehler.
Wenn du die Schrotflinte nicht von deinen Beinen wegbewegen willst und das lieber weiterhin zu Fuss erledigst, solltest du die Dateien wenigstens als Binaerdatei oeffnen um nicht alles kaputt zu machen.
Warum du das benutzen willst ist folgendes: Wenn du die Dateien als Textdateien öffnest, wird der Inhalt zu Unicode-Objekten dekodiert, da du die Dateien nicht explizit mit einem Encoding oeffnest (zb mit `codecs.open`) wird mit dem System-Encoding gearbeitet: `cp1252`. Deine Dateien scheinen inkompatible Encodings (z.b. UTF-8 oder UTF-16) zu nutzen und dann ergibt sich dein Fehler.
Wenn du die Schrotflinte nicht von deinen Beinen wegbewegen willst und das lieber weiterhin zu Fuss erledigst, solltest du die Dateien wenigstens als Binaerdatei oeffnen um nicht alles kaputt zu machen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wie hast Du es denn jetzt gelöst? Ich hoffe mal mit den dafür gedachten FunktionenPy-Prog hat geschrieben:@cofi Danke es geht jetzt.
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
Nein ich hab's doch nicht (ganz) gelöst, einmal hat's geklapt alle bilder sind am ziel angekommen aber beim zweiten mal kommt das:
(Ich hab's nicht mit shutil gemacht sondern einfach in meinen funktionen das
mit
ausgetauscht und das bein speichern natülich auch. (shutil nim ja das gleiche her also ist's doch egal)
Code: Alles auswählen
IOError: [Errno 13] Permission denied:
Code: Alles auswählen
f=open(path, 'r')
Code: Alles auswählen
f=open(path, 'rb')
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
Oh mann, dir ist schon klar, dass du alle Metadaten verlierst? <ironie>Und warum, gibt es in der std. nur das Modul shutil, es ist doch völlig wertlos?</ironie>
Btw. es wurden dir schon gute Wege gennant um das Problem zu lösen, z.b. Post #2 von lunar: shutil.copytree
Btw. es wurden dir schon gute Wege gennant um das Problem zu lösen, z.b. Post #2 von lunar: shutil.copytree
the more they change the more they stay the same
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Woher weißt Du das? Quelle?Py-Prog hat geschrieben:ausgetauscht und das bein speichern natülich auch. (shutil nim ja das gleiche her also ist's doch egal)Code: Alles auswählen
f=open(path, 'rb')
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
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Code: Alles auswählen
def copyfile(src, dst):
"""Copy data from src to dst"""
if _samefile(src, dst):
raise Error("`%s` and `%s` are the same file" % (src, dst))
with open(src, 'rb') as fsrc:
with open(dst, 'wb') as fdst:
copyfileobj(fsrc, fdst)
def copyfileobj(fsrc, fdst, length=16*1024):
"""copy data from file-like object fsrc to file-like object fdst"""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Na ja, ich schau mir gern mal die Dateien der Module an und da hab ich bei shutil das gefunden. Was wundert dich das so? (vieleicht weil ich sonst dumme frage stelle wie man wirgendwas macht?)Hyperion hat geschrieben:Woher weißt Du das? Quelle?Py-Prog hat geschrieben:ausgetauscht und das bein speichern natülich auch. (shutil nim ja das gleiche her also ist's doch egal)Code: Alles auswählen
f=open(path, 'rb')
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:
Ist bei Anfängern eher selten der Fall - zumal das ganze Prozedere sonderbar ist, da Du ja das Modul offensichtlich evaluiert hast, es aber dennoch nicht nutzt!Py-Prog hat geschrieben: Na ja, ich schau mir gern mal die Dateien der Module an und da hab ich bei shutil das gefunden. Was wundert dich das so? (vieleicht weil ich sonst dumme frage stelle wie man wirgendwas macht?)
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