ISDirectoryError:[Errno 21]是一个目录:“/”将文件从一个文件夹复制到另一个现有文件夹

2024-05-13 13:55:33 发布

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

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

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中的项目进行排序,并根据参数返回文件、目录或两者。 我得到一个错误,说我的目的地是一个目录(我想?也许“/”意味着我输入的代码不正确。)

Traceback (most recent call last):
  File "main.py", line 45, in <module>
    main(True)
  File "main.py", line 38, in main
    code.copyFilesFromSRCtoDEST(srcOpt, destOpt)
  File "/Users/jcrd/Documents/csProjects/pythonProjects/screenshotCollecting/code.py", line 34, in copyFilesFromSRCtoDEST
    shutil.copy2(files, DESTdir)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/shutil.py", line 432, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/shutil.py", line 261, in copyfile
    with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
IsADirectoryError: [Errno 21] Is a directory: '/'

任何帮助都将是惊人的,谢谢你看我的问题


Tags: 文件nameinpy目录trueformain
1条回答
网友
1楼 · 发布于 2024-05-13 13:55:33

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

for files in singulateDataInDir(SRCdir, True, False):

迭代返回的名称中的字符,以正斜杠“/”开头。因此错误Is a directory: '/'。修复方法是yield而不是return。您还需要修改函数的默认参数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)

相关问题 更多 >