diff --git a/README.md b/README.md index d843466..7758920 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ - 动机:作为学习委员,收作业的时候常常困扰于文件的命名格式,总有人不按照格式命名。于是写了这个小程序,通过提取文件名里的学号,并通过记录有学号-姓名的表格找到姓名,并按照一定文件名规范进行重命名。 - 使用步骤: - - 先选取存有班级学号-姓名对应关系的xls表格。表格要求:需要是xls而不是xlsx;第一列是学号,第二列是姓名,学号姓名从第二行开始填写。 + - 先选取存有班级学号-姓名对应关系的xls表格。表格要求:需要是xls而不是xlsx;第一列是学号,第二列是姓名,学号姓名从第二行开始填写。学号的允许格式:9-12个数字/字母的组合。(考虑数字+字母组合,是为了适配23级学生的学号) - 然后选取存有待重命名文件的文件夹。注意,其中每个文件都要包含正确的学号。因为此程序依靠学号来查找姓名,从而进行替换。 - 然后填写“文件类型”框,指明需要转换的文件在哪些类型的文件中选取。需要写完整扩展名,比如 .pdf 或 .docx,而不是不带"点"的 pdf、docx。 - 最后编辑“替换后文件名”。其中,{0} 将会被替换成学号,{1} 将会被替换成姓名。如:{0}-{1}-实验报告1 将被替换为 学号-姓名-实验报告1,{0}-作业1 将被替换成 学号-作业1。该文本框中不需要写扩展名。 diff --git a/homework_rename.py b/homework_rename.py index 28b26ec..70cd9e4 100644 --- a/homework_rename.py +++ b/homework_rename.py @@ -4,7 +4,7 @@ from tkinter import Tk, Label, Button, StringVar, Entry, Frame, scrolledtext, messagebox, filedialog import xlrd -re_stuno = re.compile(r"[0-9A-Z]{9,12}") +re_stuno = re.compile(r"[0-9A-Za-z]{9,12}") name_inf = {} @@ -18,14 +18,16 @@ def read_nameinf(): table = wb.sheet_by_index(0) nrows = table.nrows # 获取表格行数 for i in range(1, nrows): - name_inf[str(int(table.cell_value(i, 0)))] = str(table.cell_value(i, 1)) - insert_message('找到' + str(len(name_inf)) + '个姓名-学号\n') + stuno = table.cell_value(i, 0) + if isinstance(stuno, (float, int)): + name_inf[str(int(stuno))] = str(table.cell_value(i, 1)) + elif isinstance(stuno, str): + stuno_upper = stuno.upper() + name_inf[stuno_upper] = str(table.cell_value(i, 1)) + insert_message('共找到' + str(len(name_inf)) + '个学号-姓名\n') except FileNotFoundError: messagebox.showerror(title='提示', message='未找到名单文件!') name_inf = None - except ValueError as e: - messagebox.showerror(title='提示', message='大概率是因为第一列中的值不全是数字。具体错误信息:' + str(e)) - name_inf = None except Exception as e: messagebox.showerror(title='提示', message='错误信息为' + str(e)) name_inf = None @@ -70,7 +72,11 @@ def process(): stu_no = re.findall(re_stuno, filename)[0] else: continue - rectified_name = replaceby.format(stu_no, name_inf[stu_no]) + filetype + try: + rectified_name = replaceby.format(stu_no, name_inf[stu_no.upper()]) + filetype + except KeyError: + insert_message('未找到学号' + stu_no + '对应的姓名!\n') + continue full_rectified_name = os.path.join(os.path.split(filename)[0], rectified_name) os.rename(filename, full_rectified_name) insert_message(os.path.split(filename)[1])