使用python批量重命名+移动照片

参考这里: glob.glob() 函数
查找文件夹下的某格式文件
glob模块用来查找文件目录和文件,返回列表。 glob支持

*: 0个或多个字符
?:一个字符
[]: 指定范围内的字符,如[0-9]匹配数字

定义一个函数查询E盘中以.exe结尾的文件有哪些

def glob_f():    
    from glob import glob  # 导入模块的同名函数

    f = glob(r'e:\*.exe')  # 直接调用函数
    for i in f:
        print(i)

glob_f()

结果:

e:\ttsetup.exe
e:\平板信息.exe

查找指定格式的图片:

from glob import glob 
def find_pic():
    folder = "D:/IVdataset/"
    path_imgs = []
    img_formats = [".png",".bmp"]		# 指定的格式

    for fmt in img_formats:
        path_imgs.extend(glob(folder+'*'+fmt))

    print(path_imgs)
find_pic()

输出结果:

[‘D:/IVdataset\IR1.png’, ‘D:/IVdataset\IR10.png’, ‘D:/IVdataset\IR11.png’, …‘D:/IVdataset\IR22.bmp’, ‘D:/IVdataset\VIS22.bmp’]

测试一下os.path的路径分割,学到了

path = "D:/IVdataset\\IR1.png"
import os
print(os.path.splitext(path))		# ('D:/IVdataset\\IR1', '.png')
print(os.path.split(path))			# ('D:/IVdataset', 'IR1.png')
print(os.path.dirname(path))		#  D:/IVdataset
print(os.path.basename(path))		#  IR1.png

输出:

(‘D:/IVdataset\IR1’, ‘.png’)
(‘D:/IVdataset’, ‘IR1.png’)
D:/IVdataset
IR1.png

将两边照片分开

接着上面查找完指定格式照片,之后,在函数内部添加:

import os
ir,vis = [],[]
for p in path_imgs:
    ir.append(p) if os.path.basename(p)[:2] == "IR" else vis.append(p)
print(ir,vis)

输出:

[‘D:/IVdataset\IR1.png’, ‘D:/IVdataset\IR10.png’, …, ‘D:/IVdataset\IR22.bmp’]
[‘D:/IVdataset\VIS1.png’, ‘D:/IVdataset\VIS10.png’, …‘D:/IVdataset\VIS22.bmp’]

创建目标文件夹,然后重命名+移动

首先,如果文件夹不存在,要新建一下文件夹

一个函数:

 def mkdir(dir):
	"这个函数创建不存在的 路径文件夹"
	import os
	if not os.path.exists(dir):
		os.makedirs(dir)

ir_folder = "D:/ir_and_vis/Test_ir/"
vis_folder = "D:/ir_and_vis/Test_vi/"
mkdir(ir_folder)
mkdir(vis_folder)

照片批量重命名+移动(会删除原来的图片,相当于移动)

使用os.rename方法,进行批量重命名。

os.rename(i, ir_folder + pic_id + os.path.splitext(i)[1])

上面一句的含义是,比如i'D:/IVdataset\\IR1.png',它会重命名为D:/ir_and_vis/Test_ir/1.png',这也是下面的循环实现的效果。 在这个过程中,保留了原图的格式,但是改变了存放的文件夹,以及文件名。

for index,(i,v) in enumerate(zip(ir,vis)):
    pic_id = str(index + 1)
    os.rename(i, ir_folder + pic_id + os.path.splitext(i)[1])
    os.rename(v, vis_folder + pic_id + os.path.splitext(v)[1])

完整代码:

from glob import glob
import os
        
def find_pic():
	# 拿到文件夹下所以图片的路径
    folder = "D:/IVdataset/"
    path_imgs = []
    img_formats = [".png",".bmp"]
    for fmt in img_formats:
        path_imgs.extend(glob(folder+'*'+fmt))
	
	# 分为2类:ir和vis
	ir,vis = [],[]
    for p in path_imgs:
        ir.append(p) if os.path.basename(p)[:2] == "IR" else vis.append(p)
    # print(ir,vis)
	
	# 若目标文件夹不存在,则创建
    def mkdir(dir):
        if not os.path.exists(dir):
            os.makedirs(dir)

    ir_folder = "D:/ir_and_vis/Test_ir/"
    vis_folder = "D:/ir_and_vis/Test_vi/"
    mkdir(ir_folder)
    mkdir(vis_folder)
	
	# 将源文件夹中图片,重命名后放入新文件夹(移动)
    for index,(i,v) in enumerate(zip(ir,vis)):
        pic_id = str(index + 1)
        os.rename(i, ir_folder + pic_id + os.path.splitext(i)[1])
        os.rename(v, vis_folder + pic_id + os.path.splitext(v)[1])

find_pic()

你可能感兴趣的:(笔记,python,开发语言,后端)