Python isDirectoryError:[Errno 21]是一个目录:'/';将文件从一个文件夹复制到另一个现有文件夹时

Python isDirectoryError:[Errno 21]是一个目录:'/';将文件从一个文件夹复制到另一个现有文件夹时,python,python-3.x,Python,Python 3.x,我正在做一个基本的文件管理器来练习。我在尝试将文件从一个目录复制到另一个已经存在的目录时遇到了问题 def singulateDataInDir(SRCdir, passBackFiles=bool, passBackDirs=bool): for root, dirs, files in os.walk(SRCdir, topdown=True): for name in files: filesInSRCdir = os.path.join(r

我正在做一个基本的文件管理器来练习。我在尝试将文件从一个目录复制到另一个已经存在的目录时遇到了问题

def singulateDataInDir(SRCdir, passBackFiles=bool, passBackDirs=bool):
    for root, dirs, files in os.walk(SRCdir, topdown=True):
        for name in files:
            filesInSRCdir = os.path.join(root, name)
            if passBackFiles is True:
                return filesInSRCdir
        for name in dirs:
            dirsInSRCdir = os.path.join(root, name)
            if passBackDirs is True:
                return dirsInSRCdir

def copyFilesFromSRCtoDEST(SRCdir, DESTdir):  
    for files in singulateDataInDir(SRCdir, True, False):
        shutil.copy2(files, DESTdir)
我尝试对SRCdir中的项目进行排序,并根据参数返回文件、目录或两者。 我得到一个错误,说我的目的地是一个目录(我想?也许“/”意味着我输入的代码不正确。)

回溯(最近一次呼叫最后一次):
文件“main.py”,第45行,在
主(真)
文件“main.py”,第38行,在main中
code.copyFilesFromSRCtoDEST(srcOpt,destOpt)
COPYFILEFROMSRCTODEST中的第34行文件“/Users/jcrd/Documents/csProjects/pythonProjects/screenshotcollection/code.py”
copy2(文件,DESTdir)
copy2中的文件“/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/Python3.8/shutil.py”,第432行
复制文件(src、dst、follow_symlinks=follow_symlinks)
copyfile中的文件“/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/Python3.8/shutil.py”,第261行
开放式(src,'rb')作为fsrc,开放式(dst,'wb')作为fdst:
IsDirectoryError:[Errno 21]是一个目录:'/'

任何帮助都将是惊人的,感谢您查看我的问题。

问题在于
singulateDataInDir
不生成文件名,也不是生成器。它返回一个带有
return filesInSRCdir
的路径,依此类推

for files in singulateDataInDir(SRCdir, True, False):
迭代返回的名称中的字符,以正斜杠“/”开头。因此,错误
是一个目录:'/'
。修复方法是
屈服
,而不是
返回
。您还需要修改函数的默认参数
bool
是一个类型对象,并不意味着输入必须是bool

def singulateDataInDir(SRCdir, passBackFiles=False, passBackDirs=False):
    for root, dirs, files in os.walk(SRCdir, topdown=True):
        for name in files:
            filesInSRCdir = os.path.join(root, name)
            if passBackFiles is True:
                yield filesInSRCdir
        for name in dirs:
            dirsInSRCdir = os.path.join(root, name)
            if passBackDirs is True:
                yield dirsInSRCdir

def copyFilesFromSRCtoDEST(SRCdir, DESTdir):  
    for files in singulateDataInDir(SRCdir, True, False):
        shutil.copy2(files, DESTdir)

您使用的是windows还是Linux请在复制之前打印
文件
DESTdir
@我在开Mac@KlausD. 我添加了一个打印,得到了
/Users/jcrd/Documents/pics2/.DS_Store
,这让我现在很困惑,因为我复制的文件夹中只有一个Minecraft屏幕快照文件和以句号开头的文件夹隐藏在许多GUI文件管理器中。请尝试
ls-al
def singulateDataInDir(SRCdir, passBackFiles=False, passBackDirs=False):
    for root, dirs, files in os.walk(SRCdir, topdown=True):
        for name in files:
            filesInSRCdir = os.path.join(root, name)
            if passBackFiles is True:
                yield filesInSRCdir
        for name in dirs:
            dirsInSRCdir = os.path.join(root, name)
            if passBackDirs is True:
                yield dirsInSRCdir

def copyFilesFromSRCtoDEST(SRCdir, DESTdir):  
    for files in singulateDataInDir(SRCdir, True, False):
        shutil.copy2(files, DESTdir)