利用Python将Excel中数据给图片命名
### 前言> 在学籍管理中,我们导出学籍后(姓名 学籍号 身份证号)等常用的信息。如何按照学籍信息和对应学生的照片进行命名呢?
### 首先来看看效果
![](https://blog.bbskali.cn/usr/uploads/2021/05/3465248.jpg)
如上,假设我们根据学籍信息(由 `A-Z` 排序),拍摄学生照片。如何将 `excel` 中对应的学生姓名和学号与对应的学生匹配并重命名呢?
**最终实现的效果**
![](https://blog.bbskali.cn/usr/uploads/2021/05/2645340890.jpg)
### 问题解决难点
将 Excel 中数据和图片一一对应是关键。故要求我们在拍摄照片时需按照学生姓名(由 `A-Z` 排序)进行拍摄。不然数据可能无法一一对应。
### 实现方案
#### 01 对拍摄的所有文件批量重命名
因为照相设备的不同,拷贝出来相片的命名方式是不同的。
![](https://blog.bbskali.cn/usr/uploads/2021/05/589370500.jpg)
如上,按照学生姓名(由 `A-Z` 排序)后,给学生拍照。
将所有图片进行批量重命名
```
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()
```
**效果如下:**
![](https://blog.bbskali.cn/usr/uploads/2021/05/243767347.jpg)
**部分代码解读**
`self.path = '/root/photo/photo1/'` 相片文件的位置
`s = s.zfill(3)` 文件名位数,这里是 3 位,即 xxx.jpg
### 02 匹配 Excel 中数据进行重命名操作
代码如下:
```
# 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+".jpg"))#新的文件位置
os.rename(Olddir,os.path.join(path,str(idlist)+str(xylist)+".jpg"))
count = count + 1
```
**部分代码解读**
`filelist.sort(key=lambda x:int(x[:-4]))` 解决 os.listdir()乱排序问题,`-4` 按照前 4 位进行排序,防止乱序。
**运行效果**
![](https://blog.bbskali.cn/usr/uploads/2021/05/841488874.jpg)
### 方案二
利用批处理实现(适用于没有 python 环境的用户)
首先将图片批量重命名,然后将图片名称放到 Excel 中。
![](https://blog.bbskali.cn/usr/uploads/2021/05/2554147377.jpg)
在批处理中输入公式
```
="ren "&E2&".jpg "&A2&B2&".jpg"
```
`E2` 为原图片名称所在单元格
将结果复制出来,在 `txt` 中另存为 `bat` 文件,注意编码格式为 `ANSI` 不然汉字会乱码。
![](https://blog.bbskali.cn/usr/uploads/2021/05/2714116329.jpg)
### 运行效果
!(https://blog.bbskali.cn/usr/uploads/2021/05/3102124131.gif)
页:
[1]