利用python对大量图片进行重命名
不仅仅针对图片。如果要修改其他的格式,直接在18行修改相应的格式即可
# -*- coding:utf8 -*-
import os
class BatchRename():
'''
批量重命名文件夹中的图片文件
'''
def __init__(self):
self.path = 'D:\yolov4\yolov4-pytorch-master\VOCdevkit\VOC2007\demo' #表示需要命名处理的文件夹
def rename(self):
filelist = os.listdir(self.path) #获取文件路径
total_num = len(filelist) #获取文件长度(个数)
i = 1 #表示文件的命名是从1开始的
for item in filelist:
if item.endswith('.png'): #初始的图片的格式为jpg格式的(或者源文件是png格式及其他格式,后面的转换格式就可以调整为自己需要的格式即可)
src = os.path.join(os.path.abspath(self.path), item)
dst = os.path.join(os.path.abspath(self.path), ''+str(i) + '.png')#处理后的格式也为jpg格式的,当然这里可以改成png格式
dst = os.path.join(os.path.abspath(self.path), '000' + format(str(i), '0>3s') + '.png') #这种情况下的命名格式为0000000.jpg形式,可以自主定义想要的格式
try:
os.rename(src, dst)
print ('converting %s to %s ...' % (src, dst))
i = i + 1
except:
continue
print ('total %d to rename & converted %d pngs' % (total_num, i))
if __name__ == '__main__':
demo = BatchRename()
demo.rename()
如果想要修改其他格式,仅仅需要在相应位置做一定的修改就可以!
2021.11.26更新:
为了方便大批量文件夹下的大批量文件进行命名,这里做了更加方便地程序更新:
import os
class BatchRename():
'''
批量重命名文件夹中的图片文件
'''
def __init__(self, n):
self.n = n
self.path = n+'/' # 这里是将此处的下一级目录创建为新的目录
def rename(self):
filelist = os.listdir(self.path) # 获取文件路径
print(self.path)
total_num = len(filelist) # 获取文件长度(个数)
i = 1 # 表示文件的命名是从1开始的
for item in filelist:
if item.endswith('.jpg'): # 初始的图片的格式为jpg格式的(或者源文件是png格式及其他格式,后面的转换格式就可以调整为自己需要的格式即可)
src = os.path.join(os.path.abspath(self.path), item)
dst = os.path.join(os.path.abspath(self.path), '' + str(i) + '.jpg') # 处理后的格式也为jpg格式的,当然这里可以改成png格式
dst = os.path.join(os.path.abspath(self.path),
'00' + format(str(i), '0>3s') + '.jpg') # 这种情况下的命名格式为0000000.jpg形式,可以自主定义想要的格式
try:
os.rename(src, dst)
print('converting %s to %s ...' % (src, dst))
i = i + 1
except:
continue
elif item.endswith('.txt'):
src = os.path.join(os.path.abspath(self.path), item)
dst = os.path.join(os.path.abspath(self.path), '' + str(i) + '.txt')
dst = os.path.join(os.path.abspath(self.path),
'00' + format(str(i), '0>3s') + '.txt')
try:
os.rename(src, dst)
print('converting %s to %s ...' % (src, dst))
i = i + 1
except:
continue
print('total %d to rename & converted %d pngs' % (total_num, i))
if __name__ == '__main__':
filelist = os.listdir('G:\\test') ##获取当前text下里边的子目录
print(filelist)
for item in filelist: ###遍历text下每一个子目录(1,2,3...)
m = os.path.join('G:\\test', item) ###建立新的目录
for item in os.listdir('G:\\test\\%s'%item): ##遍历(1,2,3...)这些字目录的下一级目录的内容
n = os.path.join(m, item) ##创建新的目录
demo = BatchRename(n)
demo.rename()
2021.11.29更新
最近在采集一个大型数据集,所以需要对大量文件夹和图片进行重命名,由于内容包含txt、jpg和txt三种形式,所以一定要保证按照原来的顺序对文件进行命名,博客上面给出的方案尽管可以实现单一格式的文件进行命名,但是在面临多种格式的文件时其命名结果会出现错误,所以这里我写出来了一个防止顺序出错的程序:
上代码!!
# 导入os包
import os
def file_rename1(path, begin_num):
"""
@param path: 文件夹路径
@param begin_num: 起始命名数字
"""
# 设定文件路径
i = begin_num
# 对目录下的文件进行遍历
for file in os.listdir(path):
dir = os.path.join(path, file)
# print(dir)
# 判断是否是文件
if os.path.isfile(os.path.join(path, file)) == True & file.endswith('.jpg'):
# 设置新文件名
new_name = file.replace(file, "%d.jpg" % i)
# 重命名
os.rename(os.path.join(path, file), os.path.join(path, new_name))
i += 1
print("End jpg")
def file_rename2(path, begin_num):
"""
@param path: 文件夹路径
@param begin_num: 起始命名数字
"""
# 设定文件路径
i = begin_num
# 对目录下的文件进行遍历
for file in os.listdir(path):
if os.path.isfile(os.path.join(path, file)) == True & file.endswith('.txt'):
# 设置新文件名
new_name = file.replace(file, "%d.txt" % i)
# 重命名
os.rename(os.path.join(path, file), os.path.join(path, new_name))
i += 1
# 结束
print("End txt")
def rename00000():
path = r'./'
filelist = os.listdir(path) ##获取当前路径下所有的子文件
# print(filelist)
filetype = '.jpg'
for file in filelist:
# if type(file) == '.txt':
Olddir = os.path.join(path, file)
print(Olddir)
if os.path.isdir(Olddir): ###判断路径是否为目录,如果是则跳过,目的是只命名那些没有子文件的独立文件
continue
# os.path.splitext("path"):分离文件名与扩展名
filename = os.path.splitext(file)[0]
filetype = os.path.splitext(file)[1]
# zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0
Newdir = os.path.join(path, filename.zfill(5) + filetype)
os.rename(Olddir, Newdir)
print('jie shu')
if __name__ == '__main__':
path = './'
file_rename1(path, 1)
file_rename2(path, 1)
rename00000()
2021.11.30更新,还是写清楚比较好!
为了只针对原始文件夹名字为(1,2,3,4,5···)的大批量重命名,有以下简单代码:
import os
# import re
# import sys
path = r'./'
filelist = os.listdir(path) ##获取当前路径下所有的子文件
# print(filelist)
filetype = '.jpg'
for file in filelist:
# if type(file) == '.txt':
Olddir = os.path.join(path, file)
# print(Olddir)
if os.path.isdir(Olddir): ###判断路径是否为目录,如果是则跳过,目的是只命名那些没有子文件的独立文件
continue
# os.path.splitext("path"):分离文件名与扩展名
filename = os.path.splitext(file)[0]
filetype = os.path.splitext(file)[1]
# zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0
Newdir = os.path.join(path, filename.zfill(5) + filetype)
os.rename(Olddir, Newdir)
版权声明:本文为weixin_45564943原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。