前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将excel中单元格的数据给图片命名(按学籍给图片重命名)

将excel中单元格的数据给图片命名(按学籍给图片重命名)

作者头像
逍遥子大表哥
发布2021-12-19 11:45:44
3.4K0
发布2021-12-19 11:45:44
举报
文章被收录于专栏:kali blog

前言

在学籍管理中,我们导出学籍后(姓名 学籍号 身份证号)等常用的信息。如何按照学籍信息和对应学生的照片进行命名呢?

首先来看看效果

如上,假设我们根据学籍信息(由A-Z排序),拍摄学生照片。如何将excel中对应的学生姓名和学号与对应的学生匹配并重命名呢?

最终实现的效果

问题解决难点

将excel中数据和图片一一对应是关键。故要求我们在拍摄照片时需按照学生姓名(由A-Z排序)进行拍摄。不然数据可能无法一一对应。

实现方案

01对拍摄的所有文件批量重命名

因为照相设备的不同,拷贝出来相片的命名方式是不同的。

如上,按照学生姓名(由A-Z排序)后,给学生拍照。

将所有图片进行批量重命名

代码语言:javascript
复制
import os

class BatchRename():

    def __init__(self):
        self.path = '/root/photo/photo1/'

    def rename(self):
        filelist = os.listdir(self.path)
        filelist.sort()
        total_num = len(filelist)
        i = 0
        for item in filelist:
            if item.endswith('.jpg'):
                src = os.path.join(os.path.abspath(self.path), item)
                s = str(i)
                s = s.zfill(3)
                dst = os.path.join(os.path.abspath(self.path), s + '.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 jpg' % (total_num, i))


if __name__ == '__main__':
    demo = BatchRename()
    demo.rename()

效果如下:

部分代码解读

self.path = '/root/photo/photo1/' 相片文件的位置

s = s.zfill(3) 文件名位数,这里是3位,即xxx.jpg

02匹配excel中数据进行重命名操作

代码如下:

代码语言:javascript
复制
# encoding: utf-8
import os
import xlrd
count = 1 
path = "/root/photo/photo1/" #文件所在文件夹
expath = "/root/photo/info.xlsx"#名单所在文件夹
x1 = xlrd.open_workbook(expath)#读取excel
sheet1 = x1.sheet_by_name("Sheet1")#读取sheet1
idlist = sheet1.col_values(0)#存放第一列
xylist = sheet1.col_values(1)#存放第二列
filelist = os.listdir(path)#读取文件目录
filelist.sort(key=lambda x:int(x[:-4]))
for files in filelist:#遍历文件目录
    Olddir = os.path.join(path,files)#旧的文件位置
    #os.renames(Olddir,os.path.join(path,str(xylist[count]+".jpg"))#新的文件位置
    os.rename(Olddir,os.path.join(path,str(idlist[count])+str(xylist[count])+".jpg"))
    count = count + 1    

部分代码解读

filelist.sort(key=lambda x:int(x[:-4]))解决os.listdir()乱排序问题,-4按照前4位进行排序,防止乱序。

运行效果

方案二

利用批处理实现(适用于没有python环境的用户)

首先将图片批量重命名,然后将图片名称放到excel中。

在批处理中输入公式

代码语言:javascript
复制
="ren "&E2&".jpg "&A2&B2&".jpg"

E2为原图片名称所在单元格

将结果复制出来,在txt中另存为bat文件,注意编码格式为ANSI不然汉字会乱码。

运行效果

版权属于:逍遥子大表哥

本文链接:https://cloud.tencent.com/developer/article/1921464

按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 首先来看看效果
  • 问题解决难点
  • 实现方案
    • 01对拍摄的所有文件批量重命名
    • 02匹配excel中数据进行重命名操作
    • 方案二
    • 运行效果
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档