如何从文件中逐行读取#分隔的单词并赋值给类的对应属性
问题原因分析
你现有代码的核心问题是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
相关产品推荐
相关产品推荐

