将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)

问题是我认为我不能在循环中创建名称,以便最后一行代码不能工作。我怎么做才能解决这个问题?这似乎是一个很多人都有的问题,但我在谷歌上找不到任何关于它的信息。

你的循环不应该包含类定义。除非有很好的理由,否则类定义应该在全局作用域中。

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

注意:我建议使用csv,而不是自己进行解析。

对于csv数据,您应该使用Python的csv模块。请注意,我已经将Flashcard类更改为使用大写名称,这是Python中的惯例。此外,我真的不知道你的意图是什么,所以我只是把Flashcard的实例放在list中。

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:
for line in csv.reader(flashcard_data, delimiter=","):
question, solution, number = line
list_of_flashcards.append(Flashcard(question, solution, number))

扩展@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)

相关内容

  • 没有找到相关文章

最新更新