如何将同名文件夹递归复制到 Google Colab 中的另一个文件夹
How to copy folders with same names recursively to another folder in Google Colab
我有 10 个折叠,每个折叠有 2 个文件夹 face
,background
,我想在训练中复制不同的折叠,验证文件夹以便训练或验证将有 face
、background
来自不同的折叠。
我尝试了以下代码,但由于 Google Colab 使用 python 3.6.9,我不能忽略文件夹存在的错误(如 python 3.9)所以我得到以下错误:
错误:
try:
mkdir(name, mode)
except OSError:
# Cannot rely on checking for EEXIST, since the operating system
FileExistsError: [Errno 17] File exists: 'train/'
我的代码:
#--------------
# Split Dataset
#==============
# we Already have the test set
# !mkdir train
# !mkdir valid
import os, shutil
fileList = os.listdir("NewDataset")
fileList.sort()
for i in [x for x in range(10) if ((x != 9) and (x != 1))]:
# print(fileList[i])
# Train
if(i < 7):
subPathList = glob.glob('NewDataset/'+fileList[i]+'/**/', recursive=False)
for subPath in subPathList:
shutil.copytree(subPath, 'train/')
# Validate
else:
subPathList = glob.glob('NewDataset/'+fileList[i]+'/**/', recursive=False)
for subPath in subPathList:
shutil.copytree(subPath, 'valid/')
解决方案是递归地逐一复制文件:
import os, shutil
for i in [x for x in range(10) if ((x != 9) and (x != 1))]:
# print(fileList[i])
# Train
if(i > 2):
subPathList = glob.glob('/content/NewDataset/'+fileList[i]+'/**/', recursive=False)
for subPath in subPathList:
for im in os.listdir(subPath):
imFullPath = os.path.join(subPath, im)
targetPath = os.path.join('/content/train',subPath.split('/')[-2]+ '/')
# print('Train: ', targetPath)
shutil.copy(imFullPath, targetPath)
# Validate
else:
subPathList = glob.glob('/content/NewDataset/'+fileList[i]+'/**/', recursive=False)
for subPath in subPathList:
for im in os.listdir(subPath):
imFullPath = os.path.join(subPath, im)
targetPath = os.path.join('/content/valid',subPath.split('/')[-2] + '/')
# print('Validate: ', targetPath)
shutil.copy(imFullPath, targetPath)
我有 10 个折叠,每个折叠有 2 个文件夹
face
,background
,我想在训练中复制不同的折叠,验证文件夹以便训练或验证将有face
、background
来自不同的折叠。我尝试了以下代码,但由于 Google Colab 使用 python 3.6.9,我不能忽略文件夹存在的错误(如 python 3.9)所以我得到以下错误:
错误:
try:
mkdir(name, mode)
except OSError:
# Cannot rely on checking for EEXIST, since the operating system
FileExistsError: [Errno 17] File exists: 'train/'
我的代码:
#--------------
# Split Dataset
#==============
# we Already have the test set
# !mkdir train
# !mkdir valid
import os, shutil
fileList = os.listdir("NewDataset")
fileList.sort()
for i in [x for x in range(10) if ((x != 9) and (x != 1))]:
# print(fileList[i])
# Train
if(i < 7):
subPathList = glob.glob('NewDataset/'+fileList[i]+'/**/', recursive=False)
for subPath in subPathList:
shutil.copytree(subPath, 'train/')
# Validate
else:
subPathList = glob.glob('NewDataset/'+fileList[i]+'/**/', recursive=False)
for subPath in subPathList:
shutil.copytree(subPath, 'valid/')
解决方案是递归地逐一复制文件:
import os, shutil
for i in [x for x in range(10) if ((x != 9) and (x != 1))]:
# print(fileList[i])
# Train
if(i > 2):
subPathList = glob.glob('/content/NewDataset/'+fileList[i]+'/**/', recursive=False)
for subPath in subPathList:
for im in os.listdir(subPath):
imFullPath = os.path.join(subPath, im)
targetPath = os.path.join('/content/train',subPath.split('/')[-2]+ '/')
# print('Train: ', targetPath)
shutil.copy(imFullPath, targetPath)
# Validate
else:
subPathList = glob.glob('/content/NewDataset/'+fileList[i]+'/**/', recursive=False)
for subPath in subPathList:
for im in os.listdir(subPath):
imFullPath = os.path.join(subPath, im)
targetPath = os.path.join('/content/valid',subPath.split('/')[-2] + '/')
# print('Validate: ', targetPath)
shutil.copy(imFullPath, targetPath)