我有一个csv文件,我想将其处理为数据类。我想检查一下我的数据集中的成绩是否只来自预先指定的列表,如果不是这样的话,我想记录一个错误/警告。我的课看起来如下
from dataclasses import dataclass
from typing import Literal
grade_options = Literal['1A', '1B', '1C']
class Student:
name: str
age: int
grade: grade_options
我读取了csv文件(使用dataclass-csv
库(,但是实例化这种类型的有问题
from dataclass_csv import DataclassReader
with open('students.csv', encoding="utf-8-sig") as read_csv:
reader = DataclassReader(read_csv, Student, delimiter=";")
students = [student for student in reader]
这将导致TypeError: Cannot instantiate typing.Literal
除了创建手动检查器来查看csv文件中的值是否为指定选项之外,还有其他选项吗?
我自己刚刚遇到这个问题。您必须使用扩展Enum
的具体类。
基于";创建一个枚举类"在教程中:
from enum import Enum
class Grade(str, Enum):
_1a: '1A'
_1b: '1B'
_1c: '1C'
class Student:
name: str
age: int
grade: Grade