求Python/Bash脚本:批量匹配Excel学号重命名学生PDF作业文件
解决方案
一、Python 脚本方案
Python 搭配 pandas 库能轻松处理 Excel 数据,是这类场景的首选方案:
准备工作
- 安装依赖包:执行
pip install pandas openpyxl(适配 xlsx 格式的 Excel 文件) - 将你的学生信息 Excel 文件(比如命名为
student_list.xlsx)和脚本放在同一目录,或者在脚本中写对文件路径;目标作业文件夹为Word Assignment 1
脚本代码
import os import pandas as pd # 配置参数,根据实际情况修改 excel_path = "student_list.xlsx" target_folder = "Word Assignment 1" # Excel 中学号列的名称,比如"学号" id_column = "学号" # Excel 中正确姓名列的名称,比如"正确姓名" name_column = "正确姓名" # 读取 Excel 数据,转为「学号:正确姓名」的字典 student_data = pd.read_excel(excel_path).set_index(id_column)[name_column].to_dict() # 遍历目标文件夹里的 PDF 文件 for filename in os.listdir(target_folder): if not filename.endswith(".pdf"): continue # 只处理 PDF 格式文件 # 提取文件名首段的学号 split_result = filename.split("-", 1) if len(split_result) < 2: print(f"跳过格式异常文件:{filename}") continue student_id = split_result[0].strip() # 检查学号是否在字典中存在 if student_id not in student_data: print(f"未找到学号 {student_id} 对应的姓名,跳过文件:{filename}") continue correct_name = student_data[student_id] # 构建符合要求的新文件名 new_filename = f"{student_id}-{correct_name}-PHASE 1-MS WORD-ASSIGNMENT 1.pdf" old_file_path = os.path.join(target_folder, filename) new_file_path = os.path.join(target_folder, new_filename) # 执行重命名 os.rename(old_file_path, new_file_path) print(f"已完成重命名:{filename} → {new_filename}")
使用步骤
- 修改脚本中的配置参数,匹配你的实际文件路径和 Excel 列名
- 运行脚本:
python rename_assignments.py
二、Bash 脚本方案
Bash 本身无法直接读取 Excel,需要先将 Excel 转成 CSV 格式再处理:
准备工作
- 安装
csvkit工具(用于 Excel 转 CSV):Debian/Ubuntu 执行sudo apt install csvkit,Mac 执行brew install csvkit - 将 Excel 转成 CSV:
in2csv student_list.xlsx > student_list.csv - 确认 CSV 文件中学号和正确姓名的列位置(比如学号在第1列,姓名在第2列)
脚本代码
#!/bin/bash # 配置参数,根据实际情况修改 CSV_FILE="student_list.csv" TARGET_DIR="Word Assignment 1" # 学号所在的列索引(从1开始计数) ID_COL=1 # 正确姓名所在的列索引(从1开始计数) NAME_COL=2 # 构建「学号:姓名」的关联数组 declare -A student_map while IFS=, read -r id name others; do student_map["$id"]="$name" done < "$CSV_FILE" # 进入目标文件夹处理文件 cd "$TARGET_DIR" || exit 1 for pdf_file in *.pdf; do if [ ! -f "$pdf_file" ]; then continue fi # 提取文件名首段的学号 student_id=$(echo "$pdf_file" | cut -d'-' -f1 | xargs) if [ -z "$student_id" ]; then echo "跳过格式异常文件:$pdf_file" continue fi # 检查学号是否存在 if [ -z "${student_map[$student_id]}" ]; then echo "未找到学号 $student_id 对应的姓名,跳过文件:$pdf_file" continue fi correct_name="${student_map[$student_id]}" # 构建新文件名 new_pdf_file="${student_id}-${correct_name}-PHASE 1-MS WORD-ASSIGNMENT 1.pdf" mv "$pdf_file" "$new_pdf_file" echo "已完成重命名:$pdf_file → $new_pdf_file" done
使用步骤
- 修改脚本中的配置参数,匹配你的实际文件路径和 CSV 列索引
- 给脚本添加执行权限:
chmod +x rename_assignments.sh - 运行脚本:
./rename_assignments.sh
内容的提问来源于stack exchange,提问作者Dhinesh
相关产品推荐
相关产品推荐

