2016-11-04 54 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()