
本文介绍在限制条件下(禁用 split、字典和 with 语句)安全读取结构化文本文件,将交替出现的姓名与分数分别存入两个独立列表的完整实现方法,并提供健壮性处理与代码说明。
本文介绍在限制条件下(禁用 split、字典和 with 语句)安全读取结构化文本文件,将交替出现的姓名与分数分别存入两个独立列表的完整实现方法,并提供健壮性处理与代码说明。
在处理如 game.txt 这类按“姓名—分数”成对排列的纯文本文件时,核心思路是每次读取两行:第一行为玩家姓名,第二行为对应整数分数。由于题目明确禁止使用 split()、字典和 with 语句,我们必须依赖基础文件操作与循环控制,同时确保类型转换与资源释放正确。
以下是符合所有约束的推荐实现:
def parse_scores(filename):
player_names = []
high_scores = []
file = open(filename, "r")
try:
while True:
name_line = file.readline()
if not name_line: # 文件结束,无更多姓名行
break
name = name_line.rstrip('\n') # 去除换行符(禁用 split,故用 rstrip)
score_line = file.readline()
if not score_line: # 姓名后无对应分数,视为数据不完整,提前终止
break
score = int(score_line.rstrip('\n')) # 转为整数
player_names.append(name)
high_scores.append(score)
finally:
file.close() # 确保无论是否异常,文件句柄都被关闭
return player_names, high_scores
def main():
FILENAME = "game.txt"
names, scores = parse_scores(FILENAME)
print("Player Names:", names)
print("High Scores:", scores)
if __name__ == "__main__":
main()✅ 关键设计说明:
- 使用
readline()逐行读取,避免一次性加载全部内容,内存友好; -
rstrip('\n')替代split()实现行尾清理,严格满足题目限制; -
try...finally保证file.close()必然执行,防止资源泄漏; - 循环中对
name_line和score_line分别判空,有效应对文件末尾意外截断(如奇数行); -
int()直接转换分数字符串,若文件含非法数字会抛出ValueError—— 实际教学场景中可补充try/except做输入校验(如需增强鲁棒性)。
⚠️ 注意事项:
- 确保
game.txt编码为 UTF-8(默认),且每组数据严格为“姓名行 + 分数行”,无空行或注释; - 不要复用同一文件对象进行多次
readline()混淆逻辑; - 题目禁止
with语句,因此必须显式调用close(),不可省略。
该方案逻辑清晰、可读性强,完全适配初学者理解层级,同时兼顾工程实践中的错误防御意识,是 Python 基础文件 I/O 的典型范例。

















