我同学在院办工作,今天需要换2000张毕业照的名称,新的名字存放在一个Excel的表格里,新的名字也很复杂,需要一个个的复制粘贴,还有一个文理科需要自己计算,具体要求如下:

一级学科代码“07”开头的是理科,“08“开头的是工科,其他的可以算文科

学院 文理工 专业 男女 博硕 身份证号

小波同学手动替换了一百多项已经非常疲乏了,还没吃饭,所以联系到了我,代码如下:

#v1.2版本:现在知道有哪些信息是找不到对应的图片了
#v1.1版本:现在可以自动获得Excel的长度了,针对不同的信息表,也可以运行了
#浙江师范大学毕业照自动换名器:根据Excel的信息,给毕业照重命名
import os,openpyxl,time
 
class BatchRename():
    '''
    批量重命名文件夹中的图片文件
    '''
    def __init__(self):
        self.path = 'D:\图片\毕业生照片'  #表示需要命名处理的文件夹
 
    def rename(self):
        filelist = os.listdir(self.path)      #获取文件路径
        total_num = len(filelist)     #获取文件长度(个数)
        wb=openpyxl.load_workbook(r'D:\图片\202006毕业照片统计(1).xlsx')  #读取Excel
        sheet=wb['Sheet1']
        sheetname=wb.sheetnames
        print("一共找到"+str(len(sheet['A']))+"个信息,即将开始换名")
        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), '0000' + format(str(i), '0>3s') + '.jpg')    这种情况下的命名格式为0000000.jpg形式,可以自主定义想要的格式                
                for i in range(len(sheet['A'])):   #遍历Excel列表
                    if sheet['M'+str(i+1)].value[:2]=="07":
                        subject="理科"
                    elif sheet['M'+str(i+1)].value[:2]=="08":
                        subject="工科"
                    else:
                        subject="文科"
                    new_info=sheet['C'+str(i+1)].value+"-"+subject+"-"+sheet['N'+str(i+1)].value+"-"+sheet['I'+str(i+1)].value+"-"+"硕士"+"-"+sheet['K'+str(i+1)].value
                    if sheet['K'+str(i+1)].value+".jpg"==item:
                        src = os.path.join(os.path.abspath(self.path), item)
                        dst = os.path.join(os.path.abspath(self.path), new_info+'.jpg')
                        try:
                            os.rename(src, dst)   #开始换名
                            print ('converting %s to %s ...' % (src, dst))
                        except:
                            continue    
                else:
                    print(str(item)[:-4]+"没有找到相应的信息")   
if __name__ == '__main__':
    demo = BatchRename()
    demo.rename()

代码比较乱,网上东拼西凑也找了一点,算法也用的最傻的算法,就是逐个对比,每一项都和2000多张图片进行对比,,,,但是因为是十万火急赶工出来的代码,还是比较满意了。

可能要好几个人做好几个小时的事情,一分钟就做完了,真是很爽呢。


小利利很快乐