Seite 1 von 1
Ordner als variable?
Verfasst: Freitag 28. März 2014, 14:29
von capitalG
Hi,
irgendwie bekomme ich immer einen Fehler, aber komm nicht dahinter was ich anders machen muss
Code: Alles auswählen
watchfolder='C:\watchfolder'
shutil.move(downloadpath,watchfolder)
PermissionError: [WinError 32] Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird: 'C:\\watchfolder\\tmp'
danke im voraus!

Re: Ordner als variable?
Verfasst: Freitag 28. März 2014, 14:35
von cofi
Das Problem hat mit dem Python-Code nichts zu tun, sondern damit dass du damit Dateien in den Zielordner verschiebst und es die gleichnamige Datei dort ueberschreiben wuerde.
Das laesst Windows aber nicht zu, da sie noch geoeffnet ist, siehe Fehlermeldung.
Re: Ordner als variable?
Verfasst: Freitag 28. März 2014, 14:42
von capitalG
Der Ordner ist aber komplett leer davor :/
Re: Ordner als variable?
Verfasst: Freitag 28. März 2014, 14:43
von /me
capitalG hat geschrieben:
Unabhängig von der Fehlermeldung ist deine Art der Pfadangabe potenziell falsch. Ein Backslash in einem String leitet eine Escape-Sequenz ein. '\w' ist nun aktuell zum Glück kein besonderes Zeichen, aber mit beispielsweise '\t' würdest du schon auf die Nase fallen. Verwende daher einen zusätzlichen Backslash um den Backslash selber zu escapen oder benutze im Code einen raw-string.
Code: Alles auswählen
# mit Escape
watchfolder = 'C:\\watchfolder'
#mit raw-string
watchfolder = r'C:\watchfolder'
Re: Ordner als variable?
Verfasst: Freitag 28. März 2014, 14:56
von capitalG
Schonmal Danke für den Tipp mit r

Aber was ist den nun der effektivste Weg um alle Dateien in einem Ordner in einen anderen zu verschieben? Sind gerade mal 2.
edit: habs jetzt mit
Code: Alles auswählen
shutil.copyfile(os.listdir(downloadpath)[0],watchfolder+'.1')
shutil.copyfile(os.listdir(downloadpath)[1],watchfolder+'.2')
hinbekommen. Ich weiss zwar nicht warum ich '+.1' dahinter schreiben muss, ansonsten gibts einen Fehler, aber naja, funktioniert schon irgendwie erstmal bis ich es eleganter mache.
Re: Ordner als variable?
Verfasst: Freitag 28. März 2014, 15:40
von /me
capitalG hat geschrieben:edit: habs jetzt mit
Code: Alles auswählen
shutil.copyfile(os.listdir(downloadpath)[0],watchfolder+'.1')
shutil.copyfile(os.listdir(downloadpath)[1],watchfolder+'.2')
hinbekommen.
Das wirkt nicht schön.
os.listdir liefert die Informationen nicht in einer bewusst sortierten Reihenfolge. Solltest du also davon ausgehen, dass immer die alphabetisch ersten Dateien kopiert werden, dann ist das falsch. Zudem ist der doppelte Aufruf von os.listdir unglücklich. Ruf das einmal auf und halte das Ergebnis fest.
Problematisch ist weiterhin, dass os.listdir nur die Namen der Dateien liefert, nicht den kompletten Pfad. Wenn du dein Programm nicht explizit aus dem Ordner
downloadpath heraus aufrufst wird das nicht funktionieren.
Dann hast du auch noch ein Problem mit der Zielangabe.
shutil.copyfile möchte den kompletten Namen der Zieldatei haben. Nur
shutil.copy akzeptiert auch einen Pfadnamen als Ziel.
Abschließend sei noch angemerkt, dass du von "Verschieben" sprichst, in deinem Code aber Kopierroutinen verwendest. Für das Verschieben solltest du
shutil.move verwenden.