2017-07-15 20 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が実際に何であるかを見てください。 MSGのため os.mkdir(「写真」): –

+0

私はsave_attachments(MSG、dst_pics)にそれを変更しようとしたが、「写真」ではないos.listdir中(os.getcwd())場合には、同じエラーメッセージ をスローします(msg、 "Pictures") – FELASNIPER

0

いいえ、問題の一部は、os.mkdir()に文字列または1つの文字列への参照が必要であることです。 (私はちょうど言ったようにそれのまわりに "または" "を持っているべきである)

@ 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がループ外にディレクトリを作成し、任意の実行を渡す(たとえば、ディレクトリが既に存在する)という別の方法が、別の有効なアプローチになります。

関連する問題