首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >将excel中单元格的数据给图片命名(按学籍给图片重命名)

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

作者头像
逍遥子大表哥
发布于 2021-12-19 03:45:44
发布于 2021-12-19 03:45:44
4.3K02
代码可运行
举报
文章被收录于专栏:kali blogkali blog
运行总次数:2
代码可运行

前言

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

首先来看看效果

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

最终实现的效果

问题解决难点

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

实现方案

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
# 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
代码运行次数:0
运行
AI代码解释
复制
="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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[C-C++]DLL之旅2 : 调用DLL(静态&动态加载)
原文链接:http://blog.csdn.net/humanking7/article/details/78586478
祥知道
2020/03/10
3.3K0
1072 开学寄语 (20 分)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
韩旭051
2019/11/08
4750
STL训练 HDU - 1716 Ray又对数字的列产生了兴趣:
HDU - 1716 Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。 Input 每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。 Output 对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数间用空格分隔。 每组输出数据间空一行,最后一组数据后面没有空行。 Sample Input 1 2 3 4 1 1 2 3 0
风骨散人Chiam
2020/10/28
5810
[DS]链表之约瑟夫环(Josephus)问题
原文链接:https://blog.csdn.net/humanking7/article/details/80786920
祥知道
2020/03/10
5090
Educational Codeforces Round 137 (Rated for Div. 2)(A~E)
D和E在补了,在补了。。。 ---- A. Password ---- Origional Link 题目大意: 给定 n 个 0\sim 9 之间不能使用的数字,保证剩余的数大于 2。 任意两个数子组合,每个数字可使用两次,组成一个四位密码。 求在剩余的可选数字中,能组成的密码数量。 ---- 思想: 签到题。 任意两个数字可组成的密码数量固定为 6。 则总数量为剩余数字中的两两组合的数量乘 6。 即设剩余的数的数量为 x = 10 - n,总密码数为 \frac{x\times (x - 1)}{2}.
浪漫主义狗
2022/10/31
4220
程序员进阶之算法练习(八十七)
题目链接 题目大意: 给出一个整数的数组,长度为n; 现在可以进行以下的操作: 选择长度不小于2的区间[l, r],将区间内的整数依次进行异或操作,然后将得到的整数替换区间所有的数字;
落影
2023/10/18
2140
程序员进阶之算法练习(八十七)
C++ 数据结构和算法入门笔记
世界上的所有事物都可以看做是对象,二对于每个对象,抽想起来均可以分为两个要素,属性和行为。
独元殇
2023/03/14
1.7K0
杭电OJ2050-2059
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是 n 条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成 7 部分,具体如右所示。
EmoryHuang
2022/09/26
3990
杭电OJ2050-2059
《挑战30天C++入门极限》C++面向对象编程入门:构造函数与析构函数
C++面向对象编程入门:构造函数与析构函数   请注意,这一节内容是c++的重点,要特别注意!   我们先说一下什么是构造函数。   上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们始终是建立成员函数然后手工调用该函数对成员进行赋值的,那么在c++中对于类来说有没有更方便的方式能够在对象创建的时候就自动初始化成员变量呢,这一点对操作保护成员是至关重要的,答案是肯定的。关于c++类成员的初始化,有专门的构造函数来进行自动操作而无需要手工调用,在正式讲解之前先
landv
2019/07/15
7040
C++上机考试试题解析
C++上机考试试题解析 0x1 求日期是该年的第几天 输入日期(年、月、日),输出它是该年的第几天。 Input year, month, day:1981 3 1 判断闰年方法:a%4==0&&a%100!=0||a%400==0 #include<iostream> using namespace std; int main() { cout<<"Input year, month, day:"; int a,b,c,temp=0; int days,i; cin>>a
慕白
2018/07/06
6.2K0
杭电OJ2090-2099
妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐。现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵。
EmoryHuang
2022/09/26
3580
杭电OJ2080-2089
这次 xhd 面临的问题是这样的:在一个平面内有两个点,求两个点分别和原点的连线的夹角的大小。 注:夹角的范围[0,180],两个点不会在圆心出现。
EmoryHuang
2022/09/26
3400
杭电OJ2080-2089
【C++ 程序设计入门基础】- 第4节-函数
比如:int &b = a; 在定义b的时候前面的符号& 就表示b是a的一个引用,对引用变量的赋值等操作相当于对变量本身的操作。所以你对b赋值 b=a+14其实相当于a=a+14操作,引用又称为别名,相当于一个人两个名字。所以b是15。
跟着飞哥学编程
2024/01/14
2230
【C++ 程序设计入门基础】- 第4节-函数
C/CPP每日一题:Playing with digits
Some numbers have funny properties. For example:
CtrlX
2022/09/23
4340
C/CPP每日一题:Playing with digits
C++ Primer Plus习题及答案-第七章
a. igor()没有参数,且没有返回值 b. tofu()接受一个int参数,并返回一个float c. mpg()接受两个double参数,并返回一个double d. summation()将long数组名和数组长度作为参数,并返回一个long值 e. doctor()接受一个字符串参数(不能修改该字符串),并返回一个double值 f. ofcourse()将boss结构作为参数,并返回一个字符串 g. plot()将map结构的指针作为参数,并返回一个字符串
艰默
2022/11/22
1.1K0
C++数学与算法系列之初等数论
在日常生活中,数通常出现在标记(如公路、电话和门牌号码)、序列号和编码上。在数学里,数的定义延伸至包含如分数、负数、无理数、超越数及复数等抽象化的概念。
一枚大果壳
2022/12/20
4390
C++数学与算法系列之初等数论
初谈C++:命名空间、输入&输出
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。
南桥
2024/01/26
1720
初谈C++:命名空间、输入&输出
【C++100问】一篇文章(16个小例子)带你入门C++的编程世界(基础篇)
文章首发于本人CSDN账号:https://blog.csdn.net/tefuirnever
我是管小亮
2020/04/20
7230
你听过算法也是可以贪心的吗?
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 基本思路 1、建立数学模型来描述问题; 2、把求解的问题分成若干个子问题; 3、对每一子问题求解,得到子问题的局部最优解; 4、把子问题的解局部最优解合成原来解问题的一个解。 算法实现 1、从问题的某个初
用户1332428
2018/03/08
1.3K0
你听过算法也是可以贪心的吗?
[C&C++]用WinSock封装自己的UDP类1
原文链接:http://blog.csdn.net/humanking7/article/details/50726625
祥知道
2020/03/10
1.1K0
相关推荐
[C-C++]DLL之旅2 : 调用DLL(静态&动态加载)
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验