如果文件和目录存在

2024-10-02 12:26:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个问题,我试图将文件从源移动到目标。脚本第一次运行时,如果文件/目录存在,它会抛出这个错误

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

这是我的代码:

^{pr2}$

Tags: 文件inpysavedownloadsexistslinescript
3条回答

好吧,你现在的问题是操作系统.mkdir()需要字符串或对字符串的引用。(就像我刚才说的,应该有“或”在它周围)

@Coldspeed在这个问题上再次击败了我。在

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

然后参考它。不是太狡猾了,接下来就跟着@Coldspeed来回答。在

我建议让目录一次,在循环之外。这将简化您的代码。在

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)

如果出于某种原因需要在循环中创建目录,请在尝试创建之前添加代码以检查目录是否已经存在。在

例如

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指出的另一种方法是在循环之外创建目录,并传递任何执行选项(例如目录已经存在)。在

相关问题 更多 >

    热门问题