2017-07-15 71 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指出的创建循环外目录并传递任何执行选项(例如目录已存在)的替代方法将是另一种有效方法。

相关问题