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数据集中图片名称
更改图片名称代码
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)
更改图片名称后
解决方案:
知识就像是碎片,很分散,学习的过程就是收集碎片,生成自己的知识网。加油!