最近给ehr系统导入员工照片,彷佛时间回到了3年前,翻出以前写的python脚本,一键操作,还是那么的好用~
为什么要给照片重命名
往ehr系统导入照片时,一般要求员工照片名为系统内“员工编码”,这样才能做到照片和员工的一一对应。“员工编码”一般是实施ehr系统时,重新规范编码的。但曾经收集的员工照片,可能是以工号、身份证号,或者“部门+姓名”的方式命名。
如果只有几十人需要导入照片,一张张重命名就可以了。现实情况是,实施大型ehr系统的公司,员工人数动辄几百人,你绝对不想干这重复、枯燥且容易出错的活。
需要新建一个excel表,表内是“照片名”和“员工编码”的对照关系;把所有照片放在一个文件夹下。下面是批量照片重命名的python代码:
# coding=utf-8
# author: echo
# date: 2020/03/21
# openpyxl 需要安装,在命令行中输入:pip install openxyxl
# openpyxl 只能处理扩展名是.xlsx的文件
import openpyxl, os, shutil
# 获取员工代码信息表
wb = openpyxl.load_workbook('D:index.xlsx') # 请根据员工代码信息表实际所在目录修改
sheet = wb.get_sheet_by_name('Sheet1')
changedir = {}
maxrow = sheet.max_row
# 把员工代码信息转换成字典
for row in range(2, maxrow + 1):
xingming = sheet['A' + str(row)].value
index = sheet['B' + str(row)].value
changedir[xingming] = index
# 通过字典对照片进行重命名
MyPath = 'D:zhaopian' # 请根据照片实际所在目录修改
for i in os.listdir(MyPath):
olddir = os.path.abspath(os.path.join(MyPath, i))
for c in changedir.keys():
if c in str(i): # if (c + '.jpg') == str(i):
newdir = os.path.abspath(os.path.join(MyPath, changedir[c] + '.jpg'))
shutil.move(olddir, newdir) # 进行重命名
break # 重命名后,文件名i已不存在,必须中断此循环,否则报错
else:
pass
# 重命名完成后, 输出下面这句话
print('Done! All photos have been renamed')
为什么调整照片像素大小
ehr系统内显示的照片有像素要求,照片太大,会放不开,可能只显示一部分,必须调整到合适大小才可以。当然你也可以用批量调整照片大小的软件,或者直接放开照片修改权限,让员工自己上传近期免冠照片。
下面是批量修改照片大小的python代码,这是直接缩放照片,同时删除了原图,请先把照片备份。
# coding=utf-8
# author: echo
# date: 2020/03/21
# pillow 需要安装,在命令行中输入:pip install pillow
import os
from PIL import Image
# 定义2寸免冠照片的像素大小
newsize_width = 413
newsize_height = 626
# 请根据照片实际所在目录修改'D:zhaopian'
MyPath = 'D:zhaopian'
# 修改照片尺寸
for i in os.listdir(MyPath):
picturedir = os.path.abspath(os.path.join(MyPath, i))
picture = Image.open(picturedir)
oldsize_width, oldsize_height = picture.size
# 首先判断照片尺寸,不修改尺寸还不到2寸的照片
if oldsize_width > newsize_width and oldsize_height > newsize_height:
picture = picture.resize((newsize_width, newsize_height))
picture.save(os.path.join(MyPath, i))
else:
pass
# 修改尺寸完成后, 输出下面这句话
print('Done! All photos have been resized')