【问题标题】:IsADirectoryError: [Errno 21] Is a directory ERROR when trying to copy images into another fileIsADirectoryError:[Errno 21] 尝试将图像复制到另一个文件时出现目录错误
【发布时间】:2020-11-25 11:31:34
【问题描述】:

我正在尝试将源文件的 90% 的图像复制到训练文件夹中,但出现以下错误:

IsADirectoryError                         Traceback (most recent call last)
<ipython-input-24-e1fe9ed34fea> in <module>
     50 
     51 split_size = .9
---> 52 split_data(CAT_SOURCE_DIR, TRAINING_CATS_DIR, TESTING_CATS_DIR, split_size)
     53 split_data(DOG_SOURCE_DIR, TRAINING_DOGS_DIR, TESTING_DOGS_DIR, split_size)

<ipython-input-24-e1fe9ed34fea> in split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE)
     33     for i in training_set:
     34         if os.path.getsize(SOURCE + i) != 0:
---> 35             copyfile(SOURCE+i, TRAINING)
     36 
     37     for j in testing_set:

/usr/lib/python3.6/shutil.py in copyfile(src, dst, follow_symlinks)
    119     else:
    120         with open(src, 'rb') as fsrc:
--> 121             with open(dst, 'wb') as fdst:
    122                 copyfileobj(fsrc, fdst)
    123     return dst

IsADirectoryError: [Errno 21] Is a directory: '/tmp/cats-v-dogs/training/cats'

这是我的代码:

def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE):
    list = os.listdir(SOURCE)
    
    images_list = random.sample(list, len(list))
    training_set = []
    testing_set = []
    split_len = int(SPLIT_SIZE*len(list))
    for image in range(len(list)):
        if image >= split_len:
            testing_set.append(list[image])
        else:
            training_set.append(list[image])
        
    for i in training_set:
        if os.path.getsize(SOURCE + i) != 0:
            copyfile(SOURCE+i, TRAINING) 
    
    for j in testing_set:
        if os.path.getsize(SOURCE + j) != 0:
            copyfile(SOURCE+j, TESTING)


CAT_SOURCE_DIR = "/tmp/PetImages/Cat/"
TRAINING_CATS_DIR = "/tmp/cats-v-dogs/training/cats"
TESTING_CATS_DIR = "/tmp/cats-v-dogs/testing/cats"
DOG_SOURCE_DIR = "/tmp/PetImages/Dog/"
TRAINING_DOGS_DIR = "/tmp/cats-v-dogs/training/dogs"
TESTING_DOGS_DIR = "/tmp/cats-v-dogs/testing/dogs"

split_size = .9
split_data(CAT_SOURCE_DIR, TRAINING_CATS_DIR, TESTING_CATS_DIR, split_size)
split_data(DOG_SOURCE_DIR, TRAINING_DOGS_DIR, TESTING_DOGS_DIR, split_size)

我认为错误出在函数 copyfile() 中,但我确信我将正确的路径作为参数,其中 copyfile(SOURCE+i, TRAINING) 应该将源文件中的图像复制到培训目录。 我将不胜感激任何帮助! 谢谢!

【问题讨论】:

    标签: python conv-neural-network image-preprocessing


    【解决方案1】:

    您正在使用带有错误目标路径的copyfile
    根据 Python 文档,您需要提供带有文件名的完整路径。

    TRAINING_CATS_DIR 是一个目录,所以它给出了IsADirectoryError

    旁注:不要使用list 作为列表变量。 list 是 Python 中的内置变量。

    【讨论】:

      【解决方案2】:

      将图像名称加入源路径和目标路径

      copyfile(os.path.join(source,i) ,os.path.join(training,i))
      

      【讨论】:

        猜你喜欢
        • 2022-12-07
        • 2021-02-25
        • 2020-11-20
        • 1970-01-01
        • 2021-06-13
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多