如何使用参数迭代类对象

时间:2019-07-17 10:56:20

标签: python python-3.x csv iteration python-3.6

我正在尝试从csv文件中提取信息。文件中的每一行包含一个类中使用的自变量的多个值。我想获取这些值并将其提供给一个对象,但是它需要解析每一行并使用这些参数值创建一个新的对象。

我需要每个对象使用不同的名称,例如:obj1 obj2等。

这是无需迭代(仅一个对象)的操作方式。

with open("file.csv") as csvfile:
            file = csv.DictReader(csvfile)
            for line in file:
                name = line["name"]
                cost = line["cost"]
                #one object manually entered
                obj = Class(name,cost)
            csvfile.close()

2 个答案:

答案 0 :(得分:0)

您可以创建对象字典并通过字典中的相应键来获取这些对象。

obj_dict = {}
with open("file.csv") as csvfile:
            file = csv.DictReader(csvfile)
            for idx, line in enumarate(file):
                name = line["name"]
                cost = line["cost"]
                #one object manually entered
                obj = Class(name,cost)
                obj_dict['obj{}'.format(idx+1)] = obj
            csvfile.close()

obj_dict['obj1'] # returns first object of type Class

: 您可以通过编程方式用名称创建变量的另一种方式,尽管不建议在代码中实例化变量(例如,您的IDE可能会显示错误,因为它会认为未定义变量),因此不推荐使用这种方式:

_g = globals()

with open("file.csv") as csvfile:
      file = csv.DictReader(csvfile)
      for idx, line in enumarate(file):
           name = line["name"]
           cost = line["cost"]
           #one object manually entered
           obj = Class(name,cost)
           _g['obj{}'.format(idx+1)] = obj
           csvfile.close()

答案 1 :(得分:0)

使用列表,它们的用途是

with open("file.csv") as csvfile:
    reader = csv.DictReader(csvfile)
    objects = [Class(row["name"], row["cost"]) for row in reader]   

# you don't need to close the file when using `with`

print(objects[0])
print(objects[1])
# etc