2017-07-15 51 views
-1

我遇到了一個問題,我試圖將文件從源文件移動到目標文件。該腳本第一次運行,但是當我再次運行它時,如果文件/目錄存在;它拋出這個錯誤如果文件和目錄存在

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 

這裏是我的代碼:

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

問題是什麼?錯誤信息不清楚? –

回答

1

我建議你做的目錄一次,外循環。這會簡化你的代碼。

import os 

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

try: 
    os.mkdir(dst_pics) # will create the directory only if it does not exist 
except FileExistsError: 
    pass 

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

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

它給了我相同的錯誤 文件「/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py」,第542行,在移動 raise錯誤(「目標路徑'%s'已存在「%real_dst) shutil.Error:目標路徑'/Users/fela/Downloads/Dest/Pictures/image001.png'已存在 – FELASNIPER

+0

@SarahHastings請仔細閱讀您如何調用save_pics(msg,user_name) 。打印出這些行。看看Src和Dst究竟是什麼。 –

+0

我試圖將其更改爲save_attachments(味精,dst_pics),但如果「圖片」不是os.listdir(os.getcwd()),它會引發同樣的錯誤信息 : os.mkdir(「圖片」) 味精在generate_mail_messages(resumeFile)中: save_attachments(msg,「圖片」) – FELASNIPER

0

好的,你遇到的問題的一部分是os.mkdir()需要一個字符串或引用。 (正如我剛纔所說的那樣應該有'或'「左右)

@ Coldspeed再次擊敗我這個問題。

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

然後引用它。不太棘手,並按照@Coldspeed爲我的答案的其餘部分。

0

如果由於某種原因需要在循環內部創建目錄,請在嘗試創建目錄之前添加代碼以檢查您的目錄是否已經存在。

例如

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

你需要做的,這是os.mkdir如果該目錄已經存在,將引發異常的原因。它旨在這樣做。

在可能的情況下,@coldspeed指出的創建循環外目錄並傳遞任何執行選項(例如目錄已存在)的替代方法將是另一種有效方法。

相關問題