Python如何实现按科目分组匹配对应学生文件名的格式化输出
代码调整方案
核心逻辑调整
原有代码边读取边打印单条「文件-科目」记录,没有做聚合处理,要实现按科目分组输出,需要先归集数据再统一输出:
- 先初始化一个字典,以科目名为键,对应选修学生的集合为值做分组存储,用集合可以自动去重,避免同一学生同一科目出现重复记录
- 读取每个文件时,先去除文件名的
.txt后缀,提取纯学生姓名 - 逐行解析文件内的科目列表,把当前学生姓名添加到对应科目的学生集合中
- 所有文件读取完成后,按要求格式遍历输出分组结果即可
调整后可直接运行的代码
from glob import glob # 初始化科目-学生映射字典 course_student_map = {} for file_path in glob("*.txt"): # 去除.txt后缀,提取学生姓名 student = file_path.removesuffix(".txt") # 自动管理文件关闭,避免资源泄漏 with open(file_path, "r", encoding="utf-8") as f: for line in f: # 完全复用原有文本处理逻辑,拆分当前行所有科目 raw_courses = line.lower().strip().split() for raw_course in raw_courses: course = process_word(raw_course) # 科目首次出现时初始化空集合 if course not in course_student_map: course_student_map[course] = set() # 将当前学生加入对应科目的选修名单 course_student_map[course].add(student) # 按科目名排序后输出,学生名单同步排序保证结果稳定 for course in sorted(course_student_map.keys()): student_list = " ".join(sorted(course_student_map[course])) print(f"{course} ({student_list})")
版本兼容说明
如果使用的Python版本低于3.9,不支持removesuffix方法,可以把提取学生姓名的代码替换为如下写法,需要提前导入os模块:
import os student = os.path.splitext(file_path)[0]
内容的提问来源于stack exchange,提问作者Kusisi Karem
相关产品推荐
相关产品推荐

