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

如何从CSV文件读取数据并创建对应存储对象

实现方案

核心逻辑

  • 首行通过正则提取所有非空字段,自动确定Number/Semester/Grade的排列顺序,不需要硬编码位置
  • 后续每行统一用正则拆分过滤后,和首行的字段索引一一映射即可完成数据提取
  • 存储结构优先推荐字典列表,读写灵活适配大多数场景;如果需要更高的可维护性可以用数据类定义结构化对象

代码实现(Python)

import re
from dataclasses import dataclass

# 可选:定义结构化数据类,比字典更易做类型校验和后续调用
@dataclass
class CourseScore:
    number: int
    semester: str
    grade: str

result = []
field_mapping = {}

with open("你的文件路径.csv", "r", encoding="utf-8") as f:
    for line_idx, line in enumerate(f):
        # 用正则按连续分号拆分,过滤空值拿到当前行的有效内容
        valid_parts = [p for p in re.split(r";+", line.strip()) if p]
        if not valid_parts:
            continue
        
        # 处理表头行,记录每个字段对应的索引位置
        if line_idx == 0:
            for idx, field in enumerate(valid_parts):
                field_mapping[field.lower()] = idx
            continue
        
        # 处理数据行,按表头映射取值
        num = int(valid_parts[field_mapping["number"]])
        semester = valid_parts[field_mapping["semester"]]
        grade = valid_parts[field_mapping["grade"]]
        
        # 存入结果,两种存储方式二选一即可
        # 方式1:存字典
        result.append({
            "number": num,
            "semester": semester,
            "grade": grade
        })
        # 方式2:存结构化数据类实例
        # result.append(CourseScore(number=num, semester=semester, grade=grade))

# 输出验证
print(result)

优化建议

  • 如果CSV格式固定只有这三个有效字段,不需要兼容后续字段调整,可以直接用正则匹配提取每行的三个值,代码更简洁:
    匹配正则可写为r"(\d+);+([IVX]+);+([ABCDF])",直接提取三个分组的内容即可
  • 如果你不需要做复杂的格式兼容,直接用Python内置的csv模块指定分隔符为;,过滤空列的写法更轻量,不需要额外引入正则处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:02