You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:45:55