如何在Python中将CSV数据定义为变量?

时间:2019-01-11 19:21:35

标签: python

我正在尝试导入CSV文件数据,并将每行的第一个值定义为类对象或字典的变量。我设法从导入的数据创建字典,但是可以单独访问它们。有什么启示吗?谢谢。

CSV类型:

姓名,性别,年龄,国家,位置

约翰,男,53岁,巴西,圣保罗

import csv

file = "info.csv"
csv_open = open(file, newline="")
csv_data = csv.reader(csv_open)

data = []

for line in csv_data: # All CSV data as a list
    data.append(line)

class Person:

    """Simple register with name, gender, age, country and
    location info."""

    def __init__(self, name, gender, age, country, location):
        self.name = name
        self.gender = gender
        self.age = age
        self.country = country
        self.location = location

idx = 0

for elem in data:

    *problem_here_no_var* = Person( data[idx][0],
                                    data[idx][1],
                                    data[idx][2],
                                    data[idx][3],
                                    data[idx][4])
    idx += 1

print(John.country)
#My intention is to access a specific object and return any of it's attributes.

3 个答案:

答案 0 :(得分:0)

根据Dathan Ault-McCoy,您可以使用__ dict __字典来做到这一点。

答案 1 :(得分:0)

我建议使用csv。 Dictreader并自行设置标题或仅使用csv标题。像这样

person_data = []
        with open(file, newline = '') as csvfile:
            reader = csv.DictReader(csvfile)
            for row in reader:
                temp_person = Person(row['name'], row['gender'], row['age'], row['country'], row['location'])
                person_data.append(temp_person)

现在,您已经有了已初始化的Person对象的列表,之后您可以对该列表执行任何操作。

结帐https://docs.python.org/3/library/csv.html

DictReader和Writer经常使用。

由于您的代码现在是用于person对象的,因此您需要添加

__str__ method so you can print the values of the person

示例

def __str__(self):
return self.name + self.age.....

现在您可以致电

for person in person_data:
    print(person)
# can also do print(person.name) to get name can be done for any field.

这将打印您在 str 函数中定义的任何内容。

答案 2 :(得分:0)

您可以在当前模块上动态设置属性。参见How do I call setattr() on the current module?

想法是您将第一列中的字符串用作属性名称。

话虽这么说,但我不确定为什么您需要将变量设置为具有未知名称,因为以后在不知道其名称的情况下很难访问它。