2017-07-15 4 views
-1

Ich stoße auf ein Problem, wo ich versuche, die Datei von der Quelle zum Ziel zu bewegen. Das Skript funktioniert das erste Mal aber wenn ich es nochmal starte und wenn die Datei/Verzeichnis existiert; es wirft diesem FehlerWenn Datei und Verzeichnis existiert

Traceback (most recent call last): 
    File "/Users/fela/Downloads/script.py", line 118, in save_pics 
    os.mkdir(dst_pics) 
FileExistsError: [Errno 17] File exists: '/Users/dela/Downloads/Dest/Pictures/' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/Users/fela/Downloads/script.py", line 385, in <module> 
    save_pics(msg, user_name) 
    File "/Users/fela/Downloads/script.py", line 120, in save_pics 
    shutil.move(png, dst_pics) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 542, in move 
    raise Error("Destination path '%s' already exists" % real_dst) 
shutil.Error: Destination path '/Users/fela/Downloads/Dest/Pictures/image001.png' already exists 

Hier ist mein Code:

src = /Users/fela/Downloads/Source 
dst_pics = /Users/fela/Downloads/Dest/Pictures 

    for png in glob.iglob(os.path.join(src, "*.png")): 
     if os.path.isfile(png): 
      try: 
       os.mkdir(dst_pics) 
      except: 
       shutil.move(png, dst_pics) 
       continue 

    for jpg in glob.iglob(os.path.join(src, "*.[jJ][pP][gG]")): 
     if os.path.isfile(jpg): 
      try: 
       shutil.move(jpg, dst_pics) 
      except: 
       continue 
+0

Was ist die Frage? Ist die Fehlermeldung nicht klar? –

Antwort

1

Ich würde empfehlen, das Verzeichnis einmal, außerhalb der Schleife zu machen. Dies wird Ihren Code ein wenig vereinfachen.

+0

Es gibt mir den gleichen Fehler Datei "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", Zeile 542, in Bewegung Raise Fehler ("Destination path '% s' existiert bereits "% real_dst" shuttil.Error: Zielpfad '/Users/fela/Downloads/Dest/Pictures/image001.png' existiert bereits – FELASNIPER

+0

@SarahHastings Bitte schauen Sie sich genau an, wie Sie 'save_pics (msg, user_name)' aufrufen . Drucke diese Zeilen aus. Schau dir an, was Src und Dst eigentlich sind. –

+0

Ich habe versucht, es zu save_attachments (msg, dst_pics) zu ändern, aber es wirft die gleiche Fehlermeldung wenn „Bilder“ nicht in os.listdir (os.getcwd()): os.mkdir („Bilder“) für msg in generate_mail_messages (resumeFile): save_attachments (msg, "Bilder") – FELASNIPER

0

Ok, Teil des Problems, das Sie haben, ist, dass os.mkdir() eine Zeichenfolge oder einen Verweis auf eins benötigt. (Was, wie ich gerade gesagt habe, sollte '' '' '' 'oder' '')

@ Coldspeed bezwinge mich auf diese Frage - schon wieder.

dist_pics = '/Users/fela/Downloads/Dest/Pictures' 

Und dann referenzieren.Nicht zu tricky und folgen @Coldspeed für den Rest meiner Antwort.

0

Wenn Sie aus irgendeinem Grund das Verzeichnis innerhalb der Schleife erstellen müssen, fügen Sie Code hinzu, um zu überprüfen, ob Ihr Verzeichnis bereits existiert, bevor Sie es erstellen.

Zum Beispiel

if os.path.isfile(png): 
      try: 
       if not os.path.isdir(dst_pics): 
        os.mkdir(dst_pics) 
      except: 
       shutil.move(png, dst_pics) 
       continue 

Der Grund, warum Sie os.mkdir dies tun müssen, wird eine Ausnahme ausgelöst, wenn das Verzeichnis bereits vorhanden ist. Es ist so konzipiert.

Wenn möglich, wäre die Alternative, die von @coldspeed darauf hingewiesen wird, das Verzeichnis außerhalb der Schleife zu erstellen und alle Ausnahmen weiterzuleiten (z. B. das Verzeichnis ist bereits vorhanden), ein anderer gültiger Ansatz.

Verwandte Themen