Python根据Excel表来给学生的照片重新分班

一、问题描述

新学期,高二年级学生重新分班。高一照片文件夹下面有500多张以学生姓名命名的jpg格式的学生照片,由于学生重新分班,需要把学生的照片根据Excel表的班级重新分配。比如标记为二(1)班的要放在名为1的文件夹里,其它的类推。Excel表的内容如下:

Excel的班级和学生姓名

二、问题分析

如果是手工操作,要一个一个搜人的姓名,然后放进不同的文件夹里,非常的麻烦,还容易出错,即使多人同时进行,也要花三四个小时,现在用python五秒就搞成了。实现的步骤如下所示:

  1. 导入python模块os, shutil,openpyxl
  2. 读取姓名.xlsx这个Excel表,由于没有重复的学生姓名,所以以学生名为键,以学生所在的班级为值,生成一个字典。
  3. 然后,遍历高一照片这个文件夹,获取学生姓名,根据班级名来创建文件夹,然后根据学生姓名来查询其所在的班级,从而构造其存贮的路径,最后用shutil.copy把图片拷贝到指定的路径。

三、实现的代码

最终现实的代码如下,亲测5秒钟搞定五百多张照片。

import os
import shutil
from openpyxl import load_workbook

# 读取姓名.xlsx文件
workbook = load_workbook('姓名.xlsx')
sheet = workbook.active

# 获取所有学生姓名和班级信息
student_info = {}
for row in sheet.iter_rows(min_row=2, values_only=True):  # 假设第一行是标题
    class_info, name = row
    class_info = class_info.strip()  # 去除班级信息的空格
    name = name.strip()  # 去除姓名的空格
    student_info[name] = class_info

# 遍历高一照片文件夹
photo_dir = '高一照片'
for photo in os.listdir(photo_dir):
    if photo.endswith('.jpg'):
        # 提取照片名(假设照片名是学生姓名)
        student_name = os.path.splitext(photo)[0]
        
        # 查找学生的班级信息
        if student_name in student_info:
            student_class = student_info[student_name]
            
            # 提取班级编号
            class_number = student_class.split('(')[1].split(')')[0]
            class_dir = os.path.join('.', class_number)
            
            # 创建对应的班级文件夹(如不存在)
            if not os.path.exists(class_dir):
                os.makedirs(class_dir)
            
            # 复制照片到对应的班级文件夹
            src = os.path.join(photo_dir, photo)
            dst = os.path.join(class_dir, photo)
            shutil.copy(src, dst)
            print(f"已将照片 {photo} 复制到 {class_number} 文件夹")
        else:
            print(f"找不到照片 {photo} 对应的学生信息")

print("所有照片已处理完毕")

四、学后总结

撰写以上代码时,我借助了人工智能工具。在对问题描述时,我还把数据进行规整,删除了用不到的数据,调整了格式,还更换了pandas为openpyxl,这样更便于理解。

对于操作的数据,我还进行了备份,防止在测试程序时误删图片。

最后,经过三四次的路径修改和运行测试,终于测试成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PythonFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值