首页 > 解决方案 > 将 csv 文件的行转换为对象

问题描述

我是 python 新手,想创建一个美德闪存卡框(所以你会收到问题,如果你回答正确,他们会进入下一个框)我导入了一个 csv 文件,其中包含如下内容:

How many months has a year?        12               1
What is the highest mountain?      Mount Everest    1
...                                ...              ...

第一列包含问题,第二列包含解决方案,第三列包含抽认卡所在框的编号。我想将线条转换为对象,我的方法是这样的:

while open ("myfile.csv", "r") as data:
    class flashcard:
        def __init__(self, question, solution, number):
            self.question = question
            self.solution = solution
            self.number = number
        for line in data:
            q, s, n = line.strip().split(",")
            NAME = flashcard(q, s, n)

问题是我认为我无法在循环中创建名称,因此代码的最后一行将不起作用。我能做些什么来解决这个问题?看起来很多人都有这个问题,但我在谷歌上找不到任何相关信息。

标签: pythoncsvoop

解决方案


扩展@blorgon 的答案,您可以使用字典来存储 Flashcard 对象,以便快速搜索。reader.line_num用于为每一行创建一个键并存储相应的 Flashcard 实例对象。

import csv

class Flashcard:
    def __init__(self, question, solution, number):
        self.question = question
        self.solution = solution
        self.number = number

list_of_flashcards = {}
with open("myfile.csv", newline="") as flashcard_data:
    reader = csv.reader(flashcard_data, delimiter=",")
    for line in reader:
        q, s, n = list(map(str.strip,line))
        list_of_flashcards["NAME{}".format(reader.line_num)]=Flashcard(q, s, n)

推荐阅读