尝试使用 Shutil Python 模块移动文件时出现 FileNotFound 错误

FileNotFound error when trying to move files with the Shutil Python module

我写了下面的代码来识别和组织 gif 和图像文件。 cdir 指的是程序应该组织的目录。执行时,它应该在同一目录中创建文件夹 'Gifs' 和 'Images'。

import shutil, os

gifext = ['.gif', 'gifv']
picext = ['.png', '.jpg']

for file in files:
   if file.endswith(tuple(gifext)):
       if not os.path.exists(cdir+'\Gifs'):
           os.makedirs(cdir + '\Gifs')
       shutil.move(cdir + file, cdir + '\Gifs')

   elif file.endswith(tuple(picext)):
       if not os.path.exists(cdir+'\Images'):
           os.makedirs(cdir + '\Images')
       shutil.move(cdir + file, cdir + '\Images')

该目录包含文件:FIRST.gif、SECOND.gif 和 THIRD.jpg

但我收到以下错误:

  File "test.py", line 16
    shutil.move(cdir + file, cdir + '\Gifs')
  File "C:\Users\stavr\AppData\Local\Programs\Python\Python36-32\lib\shutil.py", line 552, in move
    copy_function(src, real_dst)
  File "C:\Users\stavr\AppData\Local\Programs\Python\Python36-32\lib\shutil.py", line 251, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Users\stavr\AppData\Local\Programs\Python\Python36-32\lib\shutil.py", line 114, in copyfile
    with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\stavr\Desktop\testFIRST.gif'

files 仅包含目录中文件的名称。 cdir 末尾没有反斜杠,因此,当您将 cdirfiles 的元素连接时,您会得到一个可能无效的路径:

"C:\stuff\my\path" + "file_name.png"
# equals
"C:\stuff\my\pathfile_name.png"

后者显然不是你想要的,所以你应该以某种方式将反斜杠添加到 cdir,可能像这样:

if not cdir.endswith("\"):
    cdir += "\"

您的文件路径不正确。缺少路径分隔符。

shutil.move(os.path.join(cdir, file), os.path.join(cdir, 'Gifs'))

在错误报告之后,您的目录 "test" 和文件 "FIRST.gif":

之间的路径中缺少一个“\”
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'C:\Users\stavr\Desktop\testFIRST.gif'

您可以通过在输入路径时添加“\”来解决此问题:

Enter path to the directory: C:\Users\stavr\Desktop\test\

替换:

shutil.move(cdir + file, cdir + '\Gifs')

作者:

shutil.move(os.getcwd() + '/' + file, cdir + '\Gifs')

顺便说一句: 我认为这是一个“。”在 "gifv"

之前丢失
gifext = ['.gif', 'gifv']