How to deal with OSError: [Errno 20] Not a directory: '.DS_Store'?

How to deal with OSError: [Errno 20] Not a directory: '.DS_Store'?

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

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' 我知道 'DS_dstore' 是 Mac 中的一个隐藏文件,但我该如何解决这个错误?

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

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

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

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')
os.listdir('/Users/liuchong/Desktop/LFW/lfw')

returns 一个列表,其中包含用户提供的目录中的条目名称。列表基于随机选择。

为了解决这个问题(我知道我迟到了)这里有一个 python 3 兼容代码:-

import time
import os
from shutil import copyfile

def Copyfile(in_path, out_path, quantity = None):

    filelist = os.listdir(in_path)
    counter = 0
    print("Copying to %r directory. Please wait... " % out_path)

    start = time.time()

    for i in range(quantity):
        copyfile(filelist[i], out_path+filelist[i])
        counter+=1
        sys.stdout.write("\rTotal images copied : %r" % counter)
        sys.stdout.flush()   

    end = time.time()
    print("This move operation took %r seconds to run." %(end - start))

值得一提的是 "Not a directory" 错误 (Errno 20) 的一般含义。这意味着您正在尝试使用子路径是真实文件而不是目录的路径进行操作。那就是它是一个格式错误的、不正确的路径。

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

Python 对此类文件的每个 I/O 操作都会 return 此错误:

$ 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'

OS也会return这个错误:

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

每次出现此错误都意味着您在程序中的某处连接了 file+file。

此错误是 Unix OS 特定的。在 Windows 上,对于这种格式错误的路径,您应该得到 "File not found"。