我正试图在ipynb中将图像从一个文件复制到另一个文件,但我收到了一个IsADirectoryError。
import os
import shutil
f = sorted(os.listdir('/home/jovyan/work/shot/shot/noshot/'))
f1 = sorted(os.listdir('/home/jovyan/work/shot/shot/goodshot/'))
f2 = sorted(os.listdir('/home/jovyan/work/shot/shot/badshot/'))
orders = range(0,800)
for o in orders:
fi = f[o]
shutil.copyfile(os.path.join('/home/jovyan/work/shot/shot/noshot/', fi), os.path.join('/home/jovyan/work/training/', fi))
for o in orders:
fi = f1[o]
shutil.copyfile(os.path.join('/home/jovyan/work/shot/shot/goodshot/', fi), os.path.join('/home/jovyan/work/training/', fi))
for o in orders:
fi = f2[o]
shutil.copyfile(os.path.join('/home/jovyan/work/shot/shot/badshot/', fi), os.path.join('/home/jovyan/work/training/', fi))
这是错误我在每个文件中都有800多个图像。
os.listdir
返回文件和目录,但shutil.copyfile
只接受文件
通过使用os.path.isfile
过滤目录,可以避免将目录传递到shutil.copyfile
为了防止索引超出范围,您可以检查o是否大于f(f1,f2(的长度,如果是,则可以突破for循环
import os
import shutil
f = sorted(os.listdir('/home/jovyan/work/shot/shot/noshot/'))
f1 = sorted(os.listdir('/home/jovyan/work/shot/shot/goodshot/'))
f2 = sorted(os.listdir('/home/jovyan/work/shot/shot/badshot/'))
#fix
f = [i for i in f if os.path.isfile(os.path.join('/home/jovyan/work/shot/shot/noshot/', i)]
f1 = [i for i in f1 os.path.isfile(os.path.join('/home/jovyan/work/shot/shot/goodshot/', i)]
f2 = [i for i in f2 if os.path.isfile(os.path.join('/home/jovyan/work/shot/shot/badshot/', i)]
orders = range(0,800)
for o in orders:
if o >= len(f):
break
fi = f[o]
shutil.copyfile(os.path.join('/home/jovyan/work/shot/shot/noshot/', fi), os.path.join('/home/jovyan/work/training/', fi))
for o in orders:
if o >= len(f1):
break
fi = f1[o]
shutil.copyfile(os.path.join('/home/jovyan/work/shot/shot/goodshot/', fi), os.path.join('/home/jovyan/work/training/', fi))
for o in orders:
if o >= len(f2):
break
fi = f2[o]
shutil.copyfile(os.path.join('/home/jovyan/work/shot/shot/badshot/', fi), os.path.join('/home/jovyan/work/training/', fi))
import shutil
import os
import glob
paths = ['/home/jovyan/work/shot/shot/noshot/',
'/home/jovyan/work/shot/shot/goodshot/',
'/home/jovyan/work/shot/shot/badshot/']
dst = '/home/jovyan/work/training/'
for path in paths:
x = 0
for filename in glob.glob(os.path.join(path, '*.*')):
if x < 800:
shutil.copy2(file, dst)
x += 1