根据图片名字生成文件夹并归类+批量重命名照片名

最近在处理手头的部分图片数据,所以码了点code,也许质量不高,供大家参考,
欢迎各路大神纠正问题!!

1.该代码根据照片的名字来生成文件夹,并且将同类照片放置同一文件夹creat_dir.py

#-*-coding: utf-8-*-
#Author: AIBC-MrH

#该代码为数据处理用,根据照片的名字来生成文件夹;
#并且将source_dir目录下同一类别的照片保存至对应的文件夹内;

import os
import shutil
from cv2 import cv2

source_dirs = 'pic_ori'
target_dirs = 'name/'

def create_dir(source_file, target_dirs):
    temp = []
    temp1 = []
    temp2 = []
    img = os.listdir(source_file)
    for name in img:
        temp_line = name.split('_0')
        temp.append(temp_line)
    for j in range(len(temp)):
        temp1.append(temp[j][0])
    for name in temp1:
        if name not in temp2:
            temp2.append(name)
    
    for dirs in temp2:
        if os.path.exists(target_dirs+dirs):
            break
        else:
            os.mkdir(target_dirs+dirs)

    #copy图片到指定文件夹
    dir_name = os.listdir(target_dirs)
    name_temp = []
    for dir in dir_name:
        name_temp.append(dir)
        for i in range(len(name_temp)):
            for n in img:
                pic = n.split('_0')
                if pic[0] == name_temp[i]:
                    shutil.copy(source_dirs+'/'+n, target_dirs+name_temp[i])    
    return img

if __name__=='__main__':
    print('begin to clone pics')
    dirs = create_dir(source_dirs, target_dirs)
    print('finish copy !!!!!!!!!!')

2.该代码用于重命名文件夹内各个子文件夹内的照片rename.py

import os
from time import time
#Author: AIBC-MrH
'''
批量重命名单个文件夹内多个子文件夹内的照片
'''
def rename(source_dirs):
    count = 1
    file = os.listdir(source_dirs)
    for i in range(len(file)):
        pic = os.listdir(source_dirs+'/'+file[i])
        for img in pic:
            src = os.path.join(source_dirs+'/'+file[i], img)
            dst = os.path.join(source_dirs+'/'+file[i], str(count)+'.jpg')
            count += 1
            os.rename(src, dst)
    print('pic number is:{}'.format(count))
    return file

if __name__=='__main__':
    start = time()
    print('Begin!!!!')
    rename('../train_ori')
    end = time()
    print('cost time {}'.format(end-start))

3.将处理好的文件合并至一个文件内merge.py

#-*-coding: utf-8-*-
#Author: AIBC-MrH
'''
该代码是将两个文件夹内同类别的子文件夹内的照片合并至一个文件夹内
'''
import os
from time import time
import shutil

src = 'train/'
dst = 'train_all/'

def merge(source_dir, target_dir):
    temp1 = []
    temp2 = []
    dir1 = os.listdir(source_dir)
    dir2 = os.listdir(target_dir)
    for name1 in dir1:
        temp1.append(name1)
    for name2 in dir2:
        temp2.append(name2.split('.'))
    for i in range(len(temp1)):
        for j in range(len(temp2)):
            if temp1[i].upper() == temp2[j][1].upper():
                pic1 = os.listdir(source_dir+temp1[i])
                #pic2 = os.listdir(target_dir+temp2[j][0]+'.'+temp2[j][1])
                for img1 in pic1:
                    #for img2 in pic2:
                    shutil.move(source_dir+temp1[i]+'/'+img1, target_dir+temp2[j][0]+'.'+temp2[j][1])
    return 0

                       
if __name__=='__main__':
    start = time()
    print('Begin !!!')

    merge(src, dst)

    end = time()
    print('Finished cost time:{}'.format(end-start))

欢迎指出问题!互相学习!代码需要根据自己的处理文件名稍做修改使用!

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
可以使用Python的os和shutil模块来实现这个功能。具体步骤如下: 1. 遍历文件夹及其子文件夹,找到所有重文件。 2. 对于每个重文件,获取其父文件夹称,作为目标文件夹称。 3. 判断目标文件夹是否存在,如果不存在则创。 4. 将重文件移动到目标文件夹中。 下面是一个简单的示例代码,可以实现上述功能: ```python import os import shutil # 遍历文件夹及其子文件夹,返回所有重文件的路径 def find_duplicate_files(dir_path): file_dict = {} for root, dirs, files in os.walk(dir_path): for file in files: file_path = os.path.join(root, file) if file in file_dict: file_dict[file].append(file_path) else: file_dict[file] = [file_path] return {k: v for k, v in file_dict.items() if len(v) > 1} # 将重文件移动到目标文件夹中 def move_duplicate_files(file_dict): for file, paths in file_dict.items(): for path in paths: target_dir = os.path.join(os.path.dirname(path), os.path.splitext(file)[0]) if not os.path.exists(target_dir): os.makedirs(target_dir) shutil.move(path, os.path.join(target_dir, file)) # 测试代码 if __name__ == '__main__': dir_path = '/path/to/your/directory' file_dict = find_duplicate_files(dir_path) move_duplicate_files(file_dict) ``` 在上面的代码中,需要将`/path/to/your/directory`替换为你需要归类文件夹的路径。执行完毕后,会将所有重文件移动到与其同文件夹中。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值