python将不同类型文件分开

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)

目录结构:

 生成文件结构:

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值