14
votes

I'm attempting to create a collection of objects in Python who's properties come from a CSV file.

Currently, I have a simple class:

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

    def __init__(self, var1, var2, var3)
        self.name = var1
        self.age = var2
        self.hobbies = var3

In an effort to store a lot of data without cluttering the code, I've created a CSV file like so:

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

and so on. I should have about 50 of these, and they may change, which is my reasoning for using CSV.

Is there a way to systematically make myClass objects from this CSV file? I've read you shouldn't try and make objects with unique names in a loop but I'm not sure why.

Thanks

EDIT: I'm not looking for a way to store the csv data in python, I need to create objects... my example code is a little misleading in that myClass has functions that I'd like to be able to call

2
You should bear this in mind. - jonrsharpe
this might be of interest to you, if you haven't already seen it - ajdigregorio
just make a list of myClass objects as you read in the file - cmd
There is no need to make name, age and hobbies class variables. Just initializing them as instance variables in __init__() is enough. - Roland Smith
You need to read this. - user2963623

2 Answers

20
votes

Just create an empty list and add the objects to it:

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:]))
3
votes

Why not just use a dictionary?

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:]})