问题:在处理数据的时候,每个病人的病理图片存放在单独的文件夹里,其文件夹名称唯一对应该病人,需要将多个文件夹中的全部(或者部分)图片提取出来放一起,并将每一张图片改名为文件夹名+原图片名形式。
全部提取合并:
主要利用 shutil.copy(source, target) 实现文件的复制,其中source必须是源文件,而target可以是文件名或者文件夹,因为这个项目需要对源文件改名,因此不能简单将文件直接copy到目标文件夹,而是需要生成新图片的目标路径(第10、11行)
import os, shutil
path0 = "C:\\Users\\Vann\\Desktop\\所有病人" # 原文件夹
path_target = "C:\\Users\\Vann\\Desktop\\合并" # 目标文件夹
for patient in os.listdir(path0):
path1 = os.path.join(path0,patient) # 病人文件夹路径
for file in os.listdir(path1):
path2 = os.path.join(path1, file) # 病人文件夹下图片路径
file_new = patient + '_' + file # 图片重新命名为'病人_原图片名'
path2_target = os.path.join(path_target, file_new) # 该图片的目标路径
shutil.copy(path2, path2_target) # 将图片复制到新文件夹中
部分提取合并:
在病人文件夹中按一定数目随机提取:
import os, shutil
import random # 随机需要用到random
path0 = "C:\\Users\\Vann\\Desktop\\所有病人" # 原文件夹
path_target = "C:\\Users\\Vann\\Desktop\\合并" # 目标文件夹
sample_num = 2 # 假设每个文件夹提取2张图片
for patient in os.listdir(path0):
path1 = os.path.join(path0,patient) # 病人文件夹路径
files = os.listdir(path1) # 病人文件夹下文件的列表
if len(files) >= sample_num:
samples = random.sample(files, sample_num) # 在所有图片中sample一定数量出来
else:
samples = files # 如果病人文件夹下图片数量小于需要提取的数目则全部提取
for file in samples:
path2 = os.path.join(path1, file) # 病人文件夹下图片路径
file_new = patient + '_' + file # 图片重新命名为'病人_原图片名'
path2_target = os.path.join(path_target, file_new) # 该图片的目标路径
shutil.copy(path2, path2_target) # 将图片复制到新文件夹中