如何从指定学生的课程列表中删除单个课程实例
仅删除指定学生的指定课程实现方案
核心思路
- 逐行读取文件内容,拆分出每个学生的ID和对应的课程列表
- 仅对匹配目标学生ID的行做修改:从其课程列表中移除指定课程
- 所有行(包括未修改的)重新写入文件,避免误删整行
Python 实现代码示例
假设你的studentDatabase.dat每行格式类似:1001 Math,English,Physics(学生ID和课程列表用空格分隔,课程间用逗号分隔),代码如下:
# 获取用户输入 target_student_id = input("请输入要修改的学生ID: ") target_course = input("请输入要删除的课程代码: ") # 读取并处理文件内容 processed_lines = [] with open("studentDatabase.dat", "r", encoding="utf-8") as f: for line in f: line = line.strip() # 跳过空行 if not line: processed_lines.append(line) continue # 拆分学生ID和课程列表(按第一个空格分割) line_parts = line.split(maxsplit=1) # 处理格式异常的行(比如没有课程列表的行) if len(line_parts) < 2: processed_lines.append(line) continue current_id, course_list_str = line_parts # 匹配到目标学生ID时处理课程列表 if current_id == target_student_id: # 拆分课程为列表,去除每个课程前后的空格 courses = [course.strip() for course in course_list_str.split(",")] # 移除指定课程 updated_courses = [c for c in courses if c != target_course] # 重新拼接课程字符串 updated_course_str = ",".join(updated_courses) # 生成新的行内容 processed_lines.append(f"{current_id} {updated_course_str}") else: # 非目标学生的行直接保留 processed_lines.append(line) # 将处理后的内容写回原文件 with open("studentDatabase.dat", "w", encoding="utf-8") as f: f.write("\n".join(processed_lines))
注意事项
- 请根据你实际的文件格式调整分隔符:比如如果学生ID和课程用冒号分隔,就把
split(maxsplit=1)改成split(":", maxsplit=1);如果课程用分号分隔,就把split(",")改成split(";") - 操作前建议备份
studentDatabase.dat,防止意外数据丢失 - 可以额外添加判断逻辑:如果目标课程不在该学生的课程列表中,给用户打印提示信息
内容的提问来源于stack exchange,提问作者user20442492
相关产品推荐
相关产品推荐

