如何处理OSError:[Errno 20]不是目录:'.DS_Store'?

2024-05-15 22:03:18 发布

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

我想把一些图片从目录复制到另一个目录,下面是我的代码:

import os.path
import shutil

def copyFile(sourceDir,targetDir):
    for files in os.listdir(sourceDir):
        sourceFile=os.path.join(sourceDir,files)
        if os.path.isfile(sourceFile) and sourceFile.find('.jpg')>0:
            shutil.copy(sourceFile,targetDir) 

for i in os.listdir('/Users/liuchong/Desktop/LFW/new'):

    copyFile(i,'/Users/liuchong/Desktop/LFW/lfw')  

但是当我运行它时,终端告诉我OSError: [Errno 20] Not a directory: '.DS_Store' 我知道“dstore”是Mac中的一个隐藏文件,但如何解决这个bug?


Tags: pathinimport目录forosfilesusers
3条回答

值得一提的是,“Not a directory”错误的一般含义是什么(Errno 20)。这意味着您试图使用的路径的子路径是一个真正的文件,而不是一个目录。这是一个格式错误的路径。

示例:file.txt/test.txt,其中file.txt是现有的真文件(不是目录)。

Python将为具有以下文件的每个I/O操作返回此错误:

$ python -c 'import os; os.path.getsize("file.txt/test.txt");'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/genericpath.py", line 57, in getsize
    return os.stat(filename).st_size
OSError: [Errno 20] Not a directory: 'file.txt/test.txt'

操作系统还将返回此错误:

$ stat file.txt/test.txt
stat: cannot stat 'file.txt/test.txt': Not a directory

每次出现此错误,都意味着您将文件+文件连接到程序中的某个位置。

此错误是Unix操作系统特有的。在Windows上,对于这种格式错误的路径,您应该得到“找不到文件”。

你的逻辑似乎被严重破坏了。遍历目录中的所有文件,将每个文件传递给copyFile。但是,在该函数中,您再次尝试遍历传递给函数的“directory”中的每个文件:除了您不是只传递给函数的目录,而是传递在原始目录中找到的每个文件。

目前还不清楚您要做什么,但我认为您需要删除其中一个对listdir和相关循环的调用。

当您执行os.listdir('/Users/liuchong/Desktop/LFW/lfw')时,它将返回目录和文件。在将条目作为参数传递之前,必须检查该条目的目录。

def copyFile(sourceDir,targetDir):
    for files in os.listdir(sourceDir):
        sourceFile=os.path.join(sourceDir,files)
        if os.path.isfile(sourceFile) and sourceFile.find('.jpg')>0:
            shutil.copy(sourceFile,targetDir)

for i in os.listdir('/Users/liuchong/Desktop/LFW/lfw'):
     if os.path.isdir(i):
         i = os.path.join( '/Users/liuchong/Desktop/LFW/lfw', i)
         copyFile(i,'/Users/liuchong/Desktop/LFW/lfw')

相关问题 更多 >