前言
碰到一个需求,对于同一批数据s
,在A
文件夹中有a
的标签,在B
文件中有b
的标签。但是a
标签和b
标签的个数不一样,需要在不同的文件夹中把大家都有标签的文件找出来。用于后期合并标签。
代码
# 把标注的数据中
# 同时标注了肺动脉和主动脉的数据找出,移动到labels/fdm中,labels/zdm中
# 并将对应的图像文件移动到images中
import os
from glob import glob
import shutil
def get_nii_names(work_dir)->list:
"""
计算每个文件夹中nii的文件名,返回他们的列表
:param work_dir: nii所在的文件夹
:return: 文件名的列表,如[xxx.nii.gz,...]
"""
niis_path = glob(work_dir + "*.nii.gz")
nii_names = []
for nii_path in niis_path:
_, nii_name = os.path.split(nii_path)
# print(fdm_label_name)
nii_names.append(nii_name)
return nii_names
if __name__ == '__main__':
all_images_dir = r"I:\zdm_label"
fdm_label_dir = r"I:\fdm_label\label2/"
zdm_label_dir = r"I:\zdm_label\label2/"
fdm_label_names = get_nii_names(fdm_label_dir)
zdm_label_names = get_nii_names(zdm_label_dir)
print(len(fdm_label_names),len(zdm_label_names))
# 求交集
common_names = list(set(fdm_label_names)&set(zdm_label_names))
common_names.sort(key=lambda x:int(x[:-7]))
print(len(common_names))
images_dir = "custom_images"
labels_fdm_dir = "custom_labels/fdm"
labels_zdm_dir = "custom_labels/zdm"
if not os.path.exists(images_dir):
os.mkdir(images_dir)
if not os.path.exists(labels_fdm_dir):
os.makedirs(labels_fdm_dir)
if not os.path.exists(labels_zdm_dir):
os.makedirs(labels_zdm_dir)
for common_name in common_names:
print(f'开始复制{
common_name}')
old_image_path = os.path.join(all_images_dir,common_name)
new_image_path = os.path.join(images_dir,common_name)
shutil.copy(old_image_path,new_image_path)
old_fdm_label_path = os.path.join(fdm_label_dir,common_name)
new_fdm_label_path = os.path.join(labels_fdm_dir,common_name)
shutil.copy(old_fdm_label_path,new_fdm_label_path)
old_zdm_label_path = os.path.join(zdm_label_dir, common_name)
new_zdm_label_path = os.path.join(labels_zdm_dir, common_name)
shutil.copy(old_zdm_label_path, new_zdm_label_path)