我在书中跟踪一个例子并收到错误。我有两个文件。一个名为nobel_winners.csv,另一个名为test.py,我试图从test.py中打开nobel_winners.csv。
nobel_winners.csv的内容是:
f = open('nobel_winners.csv', 'w')
来自我的test.py,我正在使用cols = nobel_winners[0].keys()
,然后是vim script
:se ff=unix
:wq
。然后程序抛出:
NameError:未定义名称'nobel_winners'。
这里出了什么问题?
答案 0 :(得分: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
答案 1 :(得分:0)
你有f =文件的开头,但是在用cols =
调用之前没有将nobel_winners作为变量引用确保在将变量分配给另一个变量之前设置变量。
答案 2 :(得分:0)
您的代码中存在多个不正确的内容。
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()
或者如评论中建议的那样,将输入文件视为常规python文件而不是csv文件(将其重命名为.py)。这样您就必须将代码更改为:
from nobel_winners import nobel_winners
cols = nobel_winners[0].keys()
答案 3 :(得分:0)
您需要将代码中的数据放在一个文件test.py中。该脚本写入文件数据/ nobel_winners.csv。正确的脚本是:
f = open('data/nobel_winners.csv', 'w')
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}
]
cols = nobel_winners[0].keys()
cols.sort()
with open('data/nobel_winners.csv', 'w') as f:
f.write(','.join(cols) + '\n')
for o in nobel_winners:
row = [str(o[col]) for col in cols]
f.write(','.join(row) + '\n')
with open('data/nobel_winners.csv') as f:
for line in f.readlines():
print(line),