今天老马提了个需求,HR模块经常会用到导照片的功能,收集上来的照片文件名称都是姓名.jpg的格式,需要根据excel里的姓名员工号数据统一刷成姓名+员工号.jpg的格式。
使用python代码实现此功能,示例代码如下:
import os
import xlwings as wx
def listdir(path, list_name): #传入存储的list
for file in os.listdir(path):
# 排除临时的文件
if '~$' in file:
continue
# 取得照片清单
if ".jpg" in file:
file_path = os.path.join(path,file)
list_name.append(file_path)
# 取得excel文件
if ".xls" in file:
index_file = os.path.join(path,file)
print("数据源文件-->"+index_file)
print(list_name)
return index_file
def getinfo(new_name,index_file): # 获取人员姓名和编号
app = wx.App(visible=False, add_book=False) # 不打开baiexcel
print("读取人员信息--->"+index_file)
wb = app.books.open(index_file)
sheet = wb.sheets[0]
nrows = sheet.used_range.last_cell.row #获取最大行数
ncolumns = sheet.used_range.last_cell.column #获取最大列数
# 查找姓名和编号的列
file_name = ""
empl_name = ""
empl_numb = ""
ename_col = 0
enumb_col = 0
print("最大列数--->"+str(ncolumns))
for col in range(1, ncolumns+1):
if sheet.range((1,col)).value == "姓名":
ename_col = col
print("姓名的列--->"+str(col))
if sheet.range((1,col)).value == "员工号":
enumb_col = col
print("员工号的列--->"+str(col))
# 取行中的姓名和编号
for row in range(2,nrows+1):
empl_name = str(sheet.range((row,ename_col)).value)
empl_numb = str(sheet.range((row,enumb_col)).value)
file_name = (empl_name + empl_numb).split('.')[0] # 新的名字
print(file_name)
new_name.append(file_name)
print(new_name)
wb.close()
app.quit()
def change_name(file_path,new_name,list_name):
# 逐个处理照片
for filename in list_name:
print("旧文件名"+filename)
old_name = (os.path.basename(filename)).split('.')[0]
# 查找新名字清单中是否有此姓名
for nfile in new_name:
if old_name in nfile:
nfname = file_path+os.sep+nfile+".jpg"
print("新文件名"+nfname)
os.rename(filename,nfname)
break
def main():
file_path = input('输入文件夹路径:') # 文件夹位置
try:
#读取文件夹下的所有文件
List_files=[]
index_file = listdir(file_path,List_files)
# 读取员工姓名和员工号,组成新的文件名
new_name=[]
getinfo(new_name,index_file)
# 修改文件名字
change_name(file_path,new_name,List_files)
except Exception as e:
# 打印异常信息
print(e)
if __name__ == '__main__':
main()
使用pyinstaller工具打包成exe文件,最好在虚拟环境中执行,这样可以控制lib的使用数量,减少可执行程序的大小。
执行结果:
PS:喜欢的同学可以关注微信公众号