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

如何从文件中逐行读取#分隔的单词并赋值给类的对应属性

问题原因分析

你现有代码的核心问题是return的触发时机过早:当第一次进入内层循环拆分出第一个单词时,函数就直接终止执行并返回该单词,自然无法完成整行拆分、整文件遍历的需求。

实现方案

我们可以按照以下步骤实现需求:

  • 先自定义对应字段的业务类,存储每行拆分后的属性值
  • 逐行读取文件,按#拆分每行得到字段列表
  • 将拆分后的字段依次赋值给类的对应属性,最后收集所有实例即可
# 先定义存储数据的类,参数顺序和你拆分后的字段顺序一一对应
class CourseRecord:
    def __init__(self, school_years, district_name, school_name, record_type, mark_type, 
                 mark1, mark2, mark3, mark4):
        self.school_years = school_years
        self.district_name = district_name
        self.school_name = school_name
        self.record_type = record_type
        self.mark_type = mark_type
        # 分数类字段可以直接在这里做类型转换,不需要后续额外处理
        self.mark1 = float(mark1)
        self.mark2 = float(mark2)
        self.mark3 = float(mark3)
        self.mark4 = float(mark4)

def load_all_records(file_path):
    records = []
    # 用with上下文管理打开文件,自动处理文件关闭
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            # 先去掉行尾的换行符、空格等空白字符
            line = line.strip()
            # 跳过文件里的空行
            if not line:
                continue
            # 按#拆分整行得到所有字段
            fields = line.split('#')
            # 按顺序把字段传入类的初始化方法,生成实例
            record = CourseRecord(*fields)
            records.append(record)
    return records

# 调用示例
if __name__ == '__main__':
    # 替换为你实际的文件路径
    all_data = load_all_records('./score_data.txt')
    # 测试取值
    for item in all_data:
        print(f"学年:{item.school_years},学区:{item.district_name},第一科分数:{item.mark1}")

如果后续字段数量、字段含义有调整,只需要对应修改CourseRecord类的__init__参数列表和赋值逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:27:07