mac在每个文件夹中都会有一个隐藏文件.DS_Store用来记录一些位置信息。
在我们使用os.listdir(path)时,会获取路径中的所有文件夹名称,因此会把.DS_Store也收纳进来,导致报错因此需要找到获取文件夹名称那一步,使用编译器中的debug功能,看看.DS_Store被存储到了哪里,并删除,下面举一个复现VGG代码时的例子:
此时os.listdir(file_path)执行后,list_class中如下所示(使用的flower数据集,通过打点并且debug功能可以找到如下表示的列表)
['roses','.DS_Store','dandelion','daisy','tulips','sunflowers']
如此时执行将数据集分为训练集和验证集操作,那么只有roses的文件夹可以被成功分为训练集和验证集,for循环执行到'.DS_Store'时将会报错。
解决方法如下:
在for循环调用list_class之前将'.DS_Store'删除(roses在列表中序号为0,那DS_Store序号为1,用del 将list_class中的第一个位置删除,便可以顺利执行)
如果还仍然报错,在编译器控制台输入ls -a,查看训练集和验证集的文件夹中内是否存在隐藏目录.DS-Store,如果存在,则在相应的文件夹内输入 sudo rm -tf <name>进行强制删除。