使用Python打开.csv文件NameError
问题描述:
我按照书中的示例并收到错误。我有两个文件。一个名为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.
这里会出现什么错误?
答
我认为这是因为变量'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
答
您已经F =文件的打开,但没有作为一个变量引用nobel_winners你的cols调用之前=
确保你在另一个变量赋值之前设定的变量。
答
在你的代码中有很多不正确的东西。
- 输入文件不是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()
为什么这个文件命名为.csv?另外,它似乎是该文件是一个有效的Python字典列表?你能控制文件的名称吗?因为那样你就可以将它作为一个.py文件,只需将其导入并直接用作有效的Python数据结构。 – idjaw
当你说'cols = nobel_winners [0] .keys()''nobel_winners'分配了什么?您可能没有定义该错误发生的变量。 – shaktimaan
您的'nobel_winners.csv'不是CSV文件,而是普通的Python文件。将其重命名为'nobel_winners.py'并从nobel_winners import *'导入' – furas