如何用Python提取TXT文档中的成绩与学分以计算GPA
Python GPA计算程序文本处理问题解决方案
核心思路:用正则精准匹配目标数据
不用修改原始TXT格式,通过正则表达式精准定位成绩和学分,同时过滤课程名里的干扰项,直接解决你遇到的三个问题:
1. 过滤课程名称中的无关数字
课程名里的数字(如English 1的1)和成绩/学分的数字特征完全不同:成绩是0-100的数值,学分一般是1-5的小数或整数。用正则仅匹配符合成绩、学分范围的数字,就能避开课程名里的干扰项。
2. 消除多余分隔符导致的空字符串
处理每行文本时,先清理首尾空白,再用正则匹配连续空白符(空格、制表符)作为分隔依据,自动过滤空内容,避免分割出空字符串。
3. 避免成绩与学分错误拼接
明确每行结构为课程名 + 成绩 + 学分,用正则匹配课程名(非成绩学分的内容),再单独提取后面的两个数值,从根源上避免数据错误拼接。
示例代码实现
假设你的TXT每行格式类似:English 1 97.0 3.0、Math Ⅱ 85 2.5,可以用以下代码处理:
import re def extract_gpa_data(file_path): gpa_list = [] # 正则匹配:课程名(非数字开头的内容) + 成绩(0-100的数值) + 学分(0-6的数值) pattern = re.compile(r'^(.+?)\s+(\d{1,3}(?:\.\d+)?)\s+(\d{1,2}(?:\.\d+)?)$') with open(file_path, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue # 跳过空行 match = pattern.match(line) if match: # 提取成绩和学分并转为浮点数 score = float(match.group(2)) credit = float(match.group(3)) gpa_list.append([score, credit]) return gpa_list # 调用示例 data = extract_gpa_data('scores.txt') print(data)
代码说明
- 正则
^(.+?)\s+(\d{1,3}(?:\.\d+)?)\s+(\d{1,2}(?:\.\d+)?)$:(.+?):非贪婪匹配课程名,直到遇到第一个连续空白符(\d{1,3}(?:\.\d+)?):匹配0-100的成绩(支持整数和小数)(\d{1,2}(?:\.\d+)?):匹配0-6的学分(覆盖常见学分范围)
- 用
strip()清理每行首尾空白,跳过空行避免空字符串问题 - 通过精准的正则分组,彻底避免课程名干扰数字和数据拼接错误
内容的提问来源于stack exchange,提问作者GildedWasp
相关产品推荐
相关产品推荐

