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

如何用Python将文本文件中的学生数据读取为指定格式的二维列表

解决思路与代码实现

你的需求是从格式为name: Joe score: 77 class: Jupiter name: Jess score: 87 class: Neptune ……的文本文件中提取信息,生成两个指定结构的列表。之前的代码思路有个小问题:按行拆分": "会把同一行里的后续键值对混在一起,比如Joe score会被当成一个值,这显然不符合预期。下面给你两种可靠的实现方式:

方法一:正则表达式(推荐,适配多种排版)

正则可以精准匹配所有key: value格式的内容,不管信息是在一行还是多行:

import re

list1 = []
list2 = []

# 用with语句安全读取文件,自动处理关闭操作
with open("student.txt", "r") as stud_file:
    # 读取整个文件内容
    content = stud_file.read()
    # 匹配所有符合"键: 值"格式的内容,捕获键和值
    all_kv = re.findall(r'(\w+): (\w+)', content)
    
    # 每3组键值对对应一个学生的信息(name/score/class)
    for idx in range(0, len(all_kv), 3):
        name = all_kv[idx][1]
        # 把score转成整数类型,符合你要的数字格式
        score = int(all_kv[idx+1][1])
        class_name = all_kv[idx+2][1]
        
        list1.append([name, score])
        list2.append([name, class_name])

# 验证结果
print("list1:", list1)
print("list2:", list2)

方法二:字符串拆分法(无需依赖正则)

如果不想用正则,也可以通过拆分字符串来提取键值对:

list1 = []
list2 = []

with open("student.txt", "r") as stud_file:
    # 读取内容并把换行换成空格,统一处理跨换行的信息
    content = stud_file.read().replace('\n', ' ')
    # 按空格拆分所有片段,得到类似['name:', 'Joe', 'score:', '77', ...]的列表
    parts = content.split()
    
    # 两两配对生成键值对,去掉键后面的冒号
    kv_pairs = []
    for j in range(0, len(parts), 2):
        key = parts[j].rstrip(':')
        value = parts[j+1]
        kv_pairs.append((key, value))
    
    # 同样按每3组键值对处理一个学生
    for idx in range(0, len(kv_pairs), 3):
        name = kv_pairs[idx][1]
        score = int(kv_pairs[idx+1][1])
        class_name = kv_pairs[idx+2][1]
        
        list1.append([name, score])
        list2.append([name, class_name])

# 验证结果
print("list1:", list1)
print("list2:", list2)

关键说明

  • 两种方法都用了with open(...)语法,这是Python处理文件的最佳实践,能自动关闭文件,避免资源泄漏。
  • 因为每个学生对应name/score/class三个属性,所以我们按每3组键值对为一个单元来处理,确保每个学生的信息对应正确。
  • 把score转成整数int(),这样list1里的分数就是数字类型,符合你给出的示例格式。

内容的提问来源于stack exchange,提问作者clink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:19:23