2016-11-04 220 views
-2

我按照书中的示例并收到错误。我有两个文件。一个名为nobel_winners.csv,另一个名为test.py,我试图从test.py中打开nobel_winners.csv。使用Python打开.csv文件NameError

nobel_winners.csv的内容是:

nobel_winners = [ 
{'category': 'Physics', 
    'name': 'Albert Einstein', 
    'nationality': 'Swiss', 
    'sex': 'male', 
    'year': 1921}, 
{'category': 'Physics', 
    'name': 'Paul Dirac', 
    'nationality': 'British', 
    'sex': 'male', 
    'year': 1933}, 
{'category': 'Chemistry', 
    'name': 'Marie Curie', 
    'nationality': 'Polish', 
    'sex': 'female', 
    'year': 1911} 
] 

从我test.py,我使用f = open('nobel_winners.csv', 'w')然后cols = nobel_winners[0].keys()。然后程序抛出:

NameError: name 'nobel_winners' is not defined.

这里会出现什么错误?

+2

为什么这个文件命名为.csv?另外,它似乎是该文件是一个有效的Python字典列表?你能控制文件的名称吗?因为那样你就可以将它作为一个.py文件,只需将其导入并直接用作有效的Python数据结构。 – idjaw

+1

当你说'cols = nobel_winners [0] .keys()''nobel_winners'分配了什么?您可能没有定义该错误发生的变量。 – shaktimaan

+1

您的'nobel_winners.csv'不是CSV文件,而是普通的Python文件。将其重命名为'nobel_winners.py'并从nobel_winners import *'导入' – furas

回答

0

我认为这是因为变量'nobel_winners'在您调用它之前没有定义。

我不知道你的代码,但如果你从csv阅读,下面的代码适用于我。尽管如此,我不是最好的方式。我在本网站发布的一个问题的指导下做了这个。

def read_from_csv(filename,nrows,ncols): 
csv_data = np.zeros((nrows,ncols)) 

with open(filename,'rb') as csvfile: 
    read_csv = csv.reader(csvfile) 
    i=0 
    for row in read_csv: 
     csv_data[i] = np.array(row) 
     csv_data[i] = csv_data[i].astype(np.float) 
     i += 1 
csvfile.close() 
return csv_data 
0

您已经F =文件的打开,但没有作为一个变量引用nobel_winners你的cols调用之前=

确保你在另一个变量赋值之前设定的变量。

0

在你的代码中有很多不正确的东西。

  • 输入文件不是csv。它有一个变量=字典列表 格式。将您的输入文件格式转换为JSON。并尝试阅读代码中的 JSON数据。
  • 您正在以写入模式打开文件,并尝试读取它 。 NameError的原因是因为您是 希望输入文件中的nobel_winners将 转换为代码中的变量。它不会。

也就是说让你的当前输入文件和工作代码,你可以重新定义你的输入文件

[ 
{'category': 'Physics', 
    'name': 'Albert Einstein', 
    'nationality': 'Swiss', 
    'sex': 'male', 
    'year': '1921'}, 
{'category': 'Physics', 
    'name': 'Paul Dirac', 
    'nationality': 'British', 
    'sex': 'male', 
    'year': '1933'}, 
{'category': 'Chemistry', 
    'name': 'Marie Curie', 
    'nationality': 'Polish', 
    'sex': 'female', 
    'year': '1911'} 
] 

,然后使用下面的代码

import ast 
with open('data.csv', 'r') as myfile: 
    data = myfile.read().replace('\n', '') 
data_dict = ast.literal_eval(data) 
cols = data_dict[0].keys() 

或者作为furas在注释中建议,将输入文件视为常规python文件而不是csv文件(将其重命名为.py)。这样你就必须改变你的代码:

from nobel_winners import nobel_winners 
cols = nobel_winners[0].keys()