Hallo zusammen,
bin blutiger Python Anfänger wie kann ich eine Datei in ein anderes Verzeichnis kopieren?
Datei kopieren
-
- User
- Beiträge: 13
- Registriert: Montag 26. Februar 2007, 00:01
Könnte ich da bitte ein Code Beispiel haben?
Einfach mal ein wenig in der Dokumentation stöbern, hilft ungemein:
http://docs.python.org/lib/module-shutil.html
ein weiteres Beispiel währe folgendes:
http://docs.python.org/lib/shutil-example.html
MfG EnTeQuAk
http://docs.python.org/lib/module-shutil.html
ein weiteres Beispiel währe folgendes:
http://docs.python.org/lib/shutil-example.html
MfG EnTeQuAk
-
- User
- Beiträge: 13
- Registriert: Montag 26. Februar 2007, 00:01
Hab jetzt das Beispiel verwendet, aber irgendwie passiert da nichts. Ich kriege da nur die Meldung 'returned exit code 0'
Code: Alles auswählen
import string, os, sys, locale
import win32com.client
def copytree(src, dst, symlinks=0):
src = "C:/Programme/test.txt"
dst = "C:/Programme/test/test.txt"
names = os.listdir(src)
os.mkdir(dst)
for name in names:
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)
try:
if symlinks and os.path.islink(srcname):
linkto = os.readlink(srcname)
os.symlink(linkto, dstname)
elif os.path.isdir(srcname):
copytree(srcname, dstname, symlinks)
else:
copy2(srcname, dstname)
except (IOError, os.error), why:
print "Can't copy %s to %s: %s" % (`srcname`, `dstname`, str(why))
Du importierst zum einen nirgendwo "shutil".
Und die Methoden "copytree" und "copy2" kommen nunmal aus "shutil".
Versuch mal folgendes:
- schreibe mit in den import-Bereich: import shutil
- schreibe vor "copytree" [8] und "copy2" [20]: shutil.
Und anstelle "os.error" kannst Du "OSError" catchen (namentlich vielleicht etwas näher am Standard).
Achja .. und gaaaanz wichtig, Dein Script wird wohl immer ohne einen Durchlauf der copytree Methode sich mit ExitCode 0 beenden, weil Du zwar die Methode copytree in Zeile 5 definierst sie jedoch aus der direkt ausführbaren Modulebene nicht aufrufst .
Eine Methode wird nur durchlaufen wenn sie auch aufgerufen wird.
Schreibe am besten hierfür an das Ende Deiner Script-Datei folgendes:
Was dann passiert ist, dass wenn Du Dein geschriebenes Modul direkt aus der CommandShell aufrufst, die Methode "copytree" mit den im If-Block definierten Testdaten aufgerufen wird.
Würdest Du Dein Module hingegen in einem anderen Python Script/Modul/etc. importieren, so würde dieser If-Block nicht durchlaufen werden, da dann "__name__" eben nicht "__main__" ist .
Noch als Tipp ... du solltest die eingehenden Methodenparameter "src" und "dst" nicht unbedingt nochmal in Deiner Methode überschreiben (Zeile: 6, 7). Für ein Testszenario oder auch einem gescripteten Ablauf, kann man wie gesagt besser in einem "if __name__ == '__main__:'" Block die (Tests)Daten definieren (oder eine andere Methode aufrufen) die dann auf die generische Methode abgefeuern.
Und die Methoden "copytree" und "copy2" kommen nunmal aus "shutil".
Versuch mal folgendes:
- schreibe mit in den import-Bereich: import shutil
- schreibe vor "copytree" [8] und "copy2" [20]: shutil.
Und anstelle "os.error" kannst Du "OSError" catchen (namentlich vielleicht etwas näher am Standard).
Achja .. und gaaaanz wichtig, Dein Script wird wohl immer ohne einen Durchlauf der copytree Methode sich mit ExitCode 0 beenden, weil Du zwar die Methode copytree in Zeile 5 definierst sie jedoch aus der direkt ausführbaren Modulebene nicht aufrufst .
Eine Methode wird nur durchlaufen wenn sie auch aufgerufen wird.
Schreibe am besten hierfür an das Ende Deiner Script-Datei folgendes:
Code: Alles auswählen
if __name__ == '__main__':
src_dir = r'c:\Programme\test.txt'
dst_dir = r'c:\Programme\test\test.txt'
copytree(src_dir, dst_dir)
Würdest Du Dein Module hingegen in einem anderen Python Script/Modul/etc. importieren, so würde dieser If-Block nicht durchlaufen werden, da dann "__name__" eben nicht "__main__" ist .
Noch als Tipp ... du solltest die eingehenden Methodenparameter "src" und "dst" nicht unbedingt nochmal in Deiner Methode überschreiben (Zeile: 6, 7). Für ein Testszenario oder auch einem gescripteten Ablauf, kann man wie gesagt besser in einem "if __name__ == '__main__:'" Block die (Tests)Daten definieren (oder eine andere Methode aufrufen) die dann auf die generische Methode abgefeuern.
-
- User
- Beiträge: 13
- Registriert: Montag 26. Februar 2007, 00:01
Code: Alles auswählen
if __name__ == '__main__':
src_dir = r'c:\Programme\test.txt'
dst_dir = r'c:\Programme\test\test.txt'
copytree(src_dir, dst_dir)
der backslash ist der escape char in python.
damit werden sonderzeichen eingeleitet, zb \n (new line)
daher wäre folgender string : "c:\name" kein pfad, sondern sowas:
c:
ame
du müsstest also den backslash selbst escapen: "c:\\name"
mit einem r vor dem string musst du die \ nicht escapen:
damit werden sonderzeichen eingeleitet, zb \n (new line)
daher wäre folgender string : "c:\name" kein pfad, sondern sowas:
c:
ame
du müsstest also den backslash selbst escapen: "c:\\name"
mit einem r vor dem string musst du die \ nicht escapen:
Code: Alles auswählen
>>> s="c:\name"
>>> s
'c:\name'
>>> print s
c:
ame
>>> s=r'c:\name'
>>> s
'c:\\name'
>>> print s
c:\name