[python]多个文件夹内容全部或部分合并到同一文件夹

问题:在处理数据的时候,每个病人的病理图片存放在单独的文件夹里,其文件夹名称唯一对应该病人,需要将多个文件夹中的全部(或者部分)图片提取出来放一起,并将每一张图片改名为文件夹名+原图片名形式。

所有病人

病人1

病人2

  1. 全部提取合并:

主要利用 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)    #  将图片复制到新文件夹中

  1. 部分提取合并:

在病人文件夹中按一定数目随机提取:

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)    #  将图片复制到新文件夹中

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值