在python笔记本中复制图像时出错



我正试图在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

最新更新