Python 如何处理操作系统错误:[Errno 20]不是目录:';。DS#U商店';?

Python 如何处理操作系统错误:[Errno 20]不是目录:';。DS#U商店';?,python,macos,python-2.7,shutil,Python,Macos,Python 2.7,Shutil,我想将一些图片从一个目录复制到另一个目录,下面是我的代码: 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')&

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

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]不是目录:'.DS\u Store'

我知道“DSdstore”是Mac中的一个隐藏文件,但是我如何解决这个错误呢?

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


不清楚您试图做什么,但我认为您需要删除对
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')
返回一个列表,其中包含用户给定的目录中的条目名称。该列表基于随机选择

为了解决这个问题(我知道我迟到了),这里有一个与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))

值得一提的是,“nota 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'
每次出现此错误时,都意味着在程序中的某个位置连接file+file


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

请修复您的缩进。我在“/Users/liuchong/Desktop/LFW/LFW”目录中有许多文件夹,我想将这些文件夹中的文件移到一个目录中。谢谢,我添加了这一行“if os.path.isdir(I)”,但代码没有运行。然后我打印“I”类型,输出为“str”……在将目录传递给函数之前,必须添加
I=os.path.join('/Users/liuchong/Desktop/LFW/LFW',I)
$ 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