我正在尝试导入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.
答案 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?
想法是您将第一列中的字符串用作属性名称。
话虽这么说,但我不确定为什么您需要将变量设置为具有未知名称,因为以后在不知道其名称的情况下很难访问它。