2017-05-11 205 views
1

我编写了以下代码来识别和组织gif和图像文件。 cdir指的是程序应该组织的目录。当它被执行时,它应该在同一个目录中创建文件夹'Gifs'和'Images'。尝试使用Shutil Python模块移动文件时出现FileNotFound错误

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' 
+0

这个问题不值得赞赏。是的,这个问题对于经验丰富的Pythonistas来说有点微不足道。但是*问题*仅仅是示例性的**:清晰的问题陈述,预期的结果/实际结果,完整的,自包含的和可执行的代码,完整的回溯。 –

+0

感谢您的回复! – Smich

回答

2

files只包含文件的名称在一个目录中。 cdir没有在最后一个反斜杠,因此,当您连接cdirfiles元素你会得到潜在无效路径:

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

后者显然不是你想要的,所以你应该补充一点,以某种方式反冲至cdir,可能是这样的:

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

'cdir.endswith(os.sep):'更好,或者建议使用'os.path.join'和原始字符串。 –

1

您的文件路径不正确。有一个路径分隔符丢失。

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

而不是手动连接路径,应该使用['os.path.join'](https://docs.python.org/3/library/os.path.html#os.path.join)。这首先会防止这种错误,并且还会导致可移植的代码。 –

0

继错误报告有一个“\”在目录中的“测试” UND文件“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\ 

OR

取代:

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

由:

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

顺便说一句: 我认为这里有一个 “”在“gifv”之前缺失

gifext = ['.gif', 'gifv'] 
相关问题