2017-10-04 17 views
1

我有一个CSV文件paises.csv,看起来像这样:Poblate对象

Chile;17000000;0.72;FALSE;0 
Hanslandia;2000000;0.2;FALSE;91 
Bastiland;4000000;0;TRUE;0 

的第一列是country名字,下面是它的一些特性,比如它的人口。所以,我创建了一个country类,并试图从csv文件其功能创建国家和填充它:

# -*- coding: utf-8 -*- 
##Importing libraries 
import csv 
##Defining classes 
class country: 
    def __init__(self,inhabitants,tolerance,underground,infected_perc): 
     self.inhabitants = inhabitants 
     self.tolerance = tolerance 
     self.underground = underground 
     self.infected_perc = infected_perc 

with open('paises.csv', 'r') as f: 
    reader = csv.reader(f, delimiter = ";") 
    for row in reader: 
     row[0]=country(row[1],row[2],row[3],row[4]) 

代码运行。但是,它甚至不创造这些国家。当我尝试看row,我所得到的是这样的:

AttributeError("Can't get attribute 'country' on ",) 
+0

您打算如何存储数据? – lmiguelvargasf

+0

好,在类“国家”的对象。第一行是名字,下面是它的功能 – idmdvan

+0

你需要一个容器(列表,字典,集合)来存储你的国家。否则,你似乎错过了一些类的概念。 – lmiguelvargasf

回答

2

我认为你需要一个容器,您可以存储你所创建的国家。我也会考虑资本化类的名称:

import csv 

class Country: 
    def __init__(self,inhabitants,tolerance,underground,infected_perc): 
     self.inhabitants = inhabitants 
     self.tolerance = tolerance 
     self.underground = underground 
     self.infected_perc = infected_perc 

countries = {} 
with open('paises.csv', 'r') as f: 
    reader = csv.reader(f, delimiter = ";") 
    for row in reader: 
     countries[row[0]] = Country(row[1], row[2], row[3], row[4]) 

你想要国家店在字典中countries,你可以用它的名称为重点访问它们。例如,要访问智利,您可以使用countries['Chile']

更新:

在你想用一个列表,而不是一本字典,你应该将字段添加到您的类来存储国名情况:

import csv 

class Country: 
    def __init__(self,name, inhabitants,tolerance,underground,infected_perc): 
     self.name = name 
     self.inhabitants = inhabitants 
     self.tolerance = tolerance 
     self.underground = underground 
     self.infected_perc = infected_perc 

countries = [] 
with open('paises.csv', 'r') as f: 
    reader = csv.reader(f, delimiter = ";") 
    for row in reader: 
     countries.append(Country(row[0], row[1], row[2], row[3], row[4])) 

在使用的情况下,列表作为容器,您可以用countries.append(Country(*row))替代countries.append(Country(row[0], row[1], row[2], row[3], row[4]))

+0

非常感谢!然而,我有两个问题:在Spyder中,我无法看到字典,因为我得到“AttributeError(”无法获取属性'国家'on) – idmdvan

+0

另一件事是我应该能够访问国家作为一个对象,而不是一个字典的关键...我怎么能改变这种情况?提前致谢!我真的被这个问题困住了。 – idmdvan

+0

@idmdvan,用列表查看我的答案,我认为这对你的案例更合适 – lmiguelvargasf