python - 将 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)
问题是我认为我无法在循环中创建名称,因此代码的最后一行将不起作用。我能做些什么来解决这个问题?看起来很多人都有这个问题,但我在谷歌上找不到任何相关信息。
解决方案
扩展@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)
推荐阅读
- bash - 从 bash 中的原始数据中提取列表,或者只是格式化输出 list_name 后跟列表内容
- reactjs - React 和 TypeScript - 组件
- objective-c - 为什么我不能访问这个指针的值。目标c
- c# - Selenium C# - Web 元素属性存在但找不到?
- c# - 如何添加不使用属性的服务器端验证规则?
- facebook - 使用带有永久页面访问令牌的 Instagram Graph Api 仅适用于某些帐户
- java - 结合 2 个区间
- sql-server - 创建一个只能通过代码更新的只读列
- python - 只能将 str (不是“字节”)连接到 str
- system-verilog - 我想在系统verilog的函数中反转并返回一个数组,我尝试了下面的代码,但出现以下错误