python 批量修改文件夹中图片名称(包含符号字母)

python 批量修改文件夹中所有图片的名字(包含符号字母)

问题原因:

在深度学习中,需要训练数据集,但是在复现他人的代码时发现,很多作者对数据集的名称进行了更改。
因此,需要对下载的原生数据集进行修改,但是庞大的图片数量仅仅依靠手动更改是不切实际的,因此需要使用程序自动修改。

因此记录这个小程序,作为以后学习使用,同时感谢以下两个链接的博客,让我获益匪浅。

http://www.360doc.com/content/18/1214/10/8728596_801721805.shtml

https://blog.csdn.net/weixin_43593330/article/details/108387664


问题描述:

NUS-WIDE数据集:
去掉图片名字中的字母并且图片顺序以四位数显示

NUS-WIDE数据集中图片名称
NUS-WIDE数据集中图片名称
更改图片名称代码

import os

def ReplcaeFileName(input_path,out_path):
    filelist = os.listdir(input_path)  # 该文件夹下所有的文件(包括文件夹)
    #print(filelist)
    count = 0
	for img in filelist:   #遍历所有文件
	    Rootdir=os.path.join(input_path, img)   #原来的文件路径
	    if os.path.isdir(Rootdir):   #如果是文件夹则跳过
	        continue
	    #将读取的文件名拆分
	    name = os.path.splitext(img)
	    #print(name)
	    # 获取元素(文件名)为'0_2124494179_b039ddccac_m','.jpg'
	    filename = name[0] # 读取文件名称“0_2124494179_b039ddccac_m”
	    # filetype=os.path.splitext(img)[1]   #文件扩展名
	    # print(filetype)
	    name_segment = filename.split("_")#以‘_’进行分割
	    
	    first_segment = name_segment[0]  # 0
	    second_segment = name_segment[1]  # 2124494179
	    three_segment = name_segment[2]  # b039ddccac
	    four_segment = name_segment[3] # m
	
	    Newdir=os.path.join(output_path,str(count).zfill(4) + "_" + second_segment + ".jpg") 
	     #用字符串函数zfill 以0补全所需位数,可根据自己需求更改图片格式,如‘jpg、png’
	    os.rename(Rootdir,Newdir)#重命名
	    print ("原图片名:" + Rootdir + "更改为:" + Newdir)
	    count+=1

if __name__ == '__main__':
	#要更改图片的文件夹所在的路径
    Rootdir = 'F:/data/NUS-WIDE/image'
    #更改后存入的文件夹路径
    Newdir = "F:/data/NUS-WIDE/re_image"
    ReplcaeFileName(Rootdir, Newdir)

修改后的图片名称
在这里插入图片描述


补充:

下面代码可将任意符号字母的图片名称进行更改。

参考下面链接的博客

https://blog.csdn.net/kobeyu652453/article/details/106944390/

要了解下面代码命令需要相应掌握正则的使用方法。下面b站链接可快速让你了解正则的使用方法。

https://www.bilibili.com/video/BV19t4y1y7qP?share_source=copy_web

如图所示,随机命名图片名称
在这里插入图片描述
程序

import os
import re
"""批量修改文件夹的图片名"""
def ReFileName(dirPath,pattern):
    """
    :param dirPath: 文件夹路径
    :pattern:正则

    :return:
    """
    # 对目录下的文件进行遍历
    i = 1
    for file in os.listdir(dirPath):
        # 判断是否是文件

        if os.path.isfile(os.path.join(dirPath, file)) == True:
           #c= os.path.basename(file)
           newName = re.sub(pattern, str(i)+'.jpg', '')
           newFilename = file.replace(file, newName)
           # 重命名
           os.rename(os.path.join(dirPath, file), os.path.join(dirPath, newFilename))
           i+=1
    print("图片名已全部修改成功")

if __name__ == '__main__':

    dirPath = "F:/data/NUS-WIDE/re_image"
    pattern = re.compile(r'.*')
    #'.'在正则中可匹配任何字符,‘*’表示匹配前面的字符0个或多个,'.*'表示除换行符之外的任何字符串
    ReFileName(dirPath,pattern)

更改图片名称后
在这里插入图片描述


解决方案:

知识就像是碎片,很分散,学习的过程就是收集碎片,生成自己的知识网。加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值