1. one2two
将目标文件夹下的文件分开保存到不同文件夹下,(例:区分jpg文件和png文件)。其他类型的文件也类似。多个文件类型也可以自己修改。
import os
import shutil
def 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_Demo\DeepLearning\tools3\12'
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 os
import 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.jpg
def 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)
目录结构:
生成文件结构: