大批量图片重命名---python解决(保证原来的顺序)

利用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版权协议,转载请附上原文出处链接和本声明。