从CSV文件中创建Python对象

19

我希望创建一个Python对象的集合,这些对象的属性来自于CSV文件。

目前,我有一个简单的类:

class myClass:
    name = ""
    age = 0
    hobbies = []

    def __init__(self, var1, var2, var3)
        self.name = var1
        self.age = var2
        self.hobbies = var3
为了在不使代码混乱的情况下存储大量数据,我创建了一个像这样的CSV文件:

为了在不使代码混乱的情况下存储大量数据,我创建了一个类似如下的CSV文件:

Robert Samson,50,swimming,biking,running
Sam Robertson,70,reading,singing,swimming

等等,我应该有大约50个这样的内容,并且它们可能会更改,这就是我使用CSV的原因。

有没有一种系统化的方法可以从这个CSV文件中创建myClass对象?我读过你不应该在循环中尝试使用唯一名称来创建对象,但我不确定为什么。

谢谢

编辑:我不是在寻找将CSV数据存储在Python中的方法,我需要创建对象...我的示例代码有点误导人,因为myClass有一些我想要调用的函数。


2
你应该记住这个 - jonrsharpe
如果你还没有看过的话,这个链接可能会对你有所帮助。 - ajdigregorio
当你读取文件时,只需创建一个myClass对象的列表。 - cmd
不需要将 nameagehobbies 定义为 类变量。在 __init__() 中将它们初始化为实例变量就足够了。 - Roland Smith
1
你需要阅读这篇文章 - user2963623
2个回答

29

只需创建一个空列表并将对象添加到其中:

import csv

my_list = []

with open('file.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        my_list.append(myClass(row[0], row[1], row[2:]))

2
这正是我在寻找的。谢谢。 - ChuckDavis

3
为什么不直接使用字典?
import csv

persons = []

with open('file.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        persons.append({'name': row[0], 'age': int(row[1]), 
                        'hobbies': row[2:]})

2
我不是在寻找一种将csv数据存储在Python中的方法,我需要创建对象...我的示例代码有点误导人,因为myClass具有我想要调用的函数。 - ChuckDavis
1
因为您可能需要合并数据或验证数据模型。 - ncfx1099

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接