将目标文件夹下的文件分开保存到不同文件夹下,(例:区分jpg文件和png文件)。其他类型的文件也类似。多个文件类型也可以自己修改。
import osimport shutildef split_file(src, dst1, dst2): ''' function: 将文件中不同后缀的文件分开到不同文件夹 example: 区分jpg和png图像 src:str(filefolder) dst:str(filefolder) ''' #区分jpg和json jpg = [] json = [] for f in os.listdir(src): if f.endswith('.png'): jpg.append(f) elif f.endswith('.jpg'): json.append(f) # 创建目标文件夹 if not os.path.isdir(dst1): os.mkdir(dst1) if not os.path.isdir(dst2): os.mkdir(dst2) # 拷贝文件到目标文件夹 for j in jpg: _jpg = os.path.join(src, j) shutil.copy(_jpg, dst1) for p in json: _png = os.path.join(src, p) shutil.copy(_png, dst2)if __name__ == '__main__': base_filename = r'F:python_DemoDeepLearningtools312' src = os.path.join(base_filename, 'images') dst1 = os.path.join(base_filename, 'png') dst2 = os.path.join(base_filename, 'jpg') split_file(src, dst1, dst2)
2、one2two_v2针对 CL-CMU-CD中的CD_train数据集,遍历获取两个对应的RGB图像分别保存到两个文件夹,遍历获取GT图像保存到一个文件夹,并都进行重命名。
后面附有文件目录。
import osimport shutil# 查看根目录下包括的路径、文件夹、文件 os.walk()def getpath(path): pathlist=[] FileList=os.listdir(path) print(FileList) for root, dirs, files in os.walk(path): # print(root) # print(dirs) # print(files) for dir in dirs: ##################################################################### if dir=='RGB': # 选择RGB文件夹 使用split_file(src, dst1, dst2)时,用这个 # if dir=='GT': # 选择GT文件夹 使用getGT(src, dst3)时,用这个 ###################################################################### src=os.path.join(root,dir) # print(dir) # print(src) pathlist.append(src) print(pathlist) return pathlist# 区分不同数字开头的jpg图像,并保存 如:1_00.jpg 2_00.jpgdef split_file(src, dst1, dst2): jpg1 = [] # 原始文件名 jpg1_rename = [] # 改名后的文件名 jpg2 = [] jpg2_rename = [] for f in os.listdir(src): x=src.split('\')[-2] # 切取部分文件夹名(000,001,……),用于重命名 if f.endswith('.jpg'): info = f.split('_') before=info[0] last=info[1] if before == '1': jpg1.append(f) f = before + '_' + x + '_' + last jpg1_rename.append(f) if before == '2': jpg2.append(f) f = before + '_' + x + '_' + last jpg2_rename.append(f) # print(jpg1) # print(jpg2) # print(jpg1_rename) # print(jpg2_rename) # 创建目标文件夹 if not os.path.isdir(dst1): os.mkdir(dst1) if not os.path.isdir(dst2): os.mkdir(dst2) # 拷贝文件到目标文件夹,并在目标文件夹重命名文件 for j1, j2 in zip(jpg1, jpg1_rename): src_j1 = os.path.join(src, j1) shutil.copy(src_j1, dst1) dst1_j1 = os.path.join(dst1, j1) dst1_rename = os.path.join(dst1, j2) print(dst1_j1) print(dst1_rename) os.rename(dst1_j1, dst1_rename) for j1, j2 in zip(jpg2, jpg2_rename): src_j1 = os.path.join(src, j1) shutil.copy(src_j1, dst2) dst2_j1 = os.path.join(dst2, j1) dst2_rename = os.path.join(dst2, j2) os.rename(dst2_j1, dst2_rename)# 获取GT图像,并保存def getGT(src,dst3): gt1 = [] # 原始文件名 gt1_rename = [] # 改名后的文件名 for f in os.listdir(src): x = src.split('\')[-2] # 切取部分文件夹名(000,001,……),用于重命名 if f.endswith('.png'): info = f.split('t') last = info[1] gt1.append(f) f = 'gt_' + x + '_' + last gt1_rename.append(f) print(gt1) print(gt1_rename) # 创建目标文件夹 if not os.path.isdir(dst3): os.mkdir(dst3) # 拷贝文件到目标文件夹,并在目标文件夹重命名文件 for g1, g2 in zip(gt1, gt1_rename): src_g1 = os.path.join(src, g1) shutil.copy(src_g1, dst3) dst3_g1 = os.path.join(dst3, g1) dst3_rename = os.path.join(dst3, g2) print(dst3_g1) print(dst3_rename) os.rename(dst3_g1, dst3_rename)if __name__ == '__main__': base_filename = 'F:/python_Demo/DeepLearning/tools3' src_root = os.path.join(base_filename, 'CD_train01') srcs = getpath(src_root) for src in srcs: print(src) dst1 = os.path.join(base_filename, 'image01') dst2 = os.path.join(base_filename, 'image02') dst3 = os.path.join(base_filename, 'label') # (1):将多个文件夹中的RGB文件夹里的图像复制,并按照首字母分类(‘1’或‘2’), # 分别保存到两个新建的文件夹中,并重命名 split_file(src, dst1, dst2) # (2):将多个文件夹中的GT文件夹里的图像复制,保存到新建文件夹中,并重命名 # getGT(src, dst3)
目录结构:
生成文件结构: