用Python打开.csv文件出错
我在一本书中引用了一个例子,收到了一个错误。我有两个文件。一个名为nobel_winners.csv,另一个名为test.py我正在尝试从test.py打开nobel_winners.csv nobel_winners.csv的内容如下:用Python打开.csv文件出错,python,Python,我在一本书中引用了一个例子,收到了一个错误。我有两个文件。一个名为nobel_winners.csv,另一个名为test.py我正在尝试从test.py打开nobel_winners.csv nobel_winners.csv的内容如下: nobel_winners = [ {'category': 'Physics', 'name': 'Albert Einstein', 'nationality': 'Swiss', 'sex': 'male', 'year': 1921}
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\u winners.csv','w')
然后是cols=nobel\u winners[0].keys()。然后程序抛出:
NameError:未定义“诺贝尔奖获得者”的名称
这里出了什么问题?我认为这是因为变量“诺贝尔奖获得者”在你称之为“诺贝尔奖获得者”之前没有定义
我不知道你的代码,但如果你是从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=文件的打开,但在使用cols调用它之前,没有将nobel_winners作为变量引用=
在将变量赋给另一个变量之前,请确保已设置该变量 您的代码中有多处不正确
- 输入文件不是csv。它有一个变量=字典列表
格式。将输入文件格式转换为JSON。试着读一下
代码中的JSON数据李>
- 您正在以写入模式打开文件,并且
试着读它。出现
名称错误的原因是您
希望输入文件中的诺贝尔奖获得者
将被转换
添加到代码中的变量。但它不会
也就是说,要使当前输入文件和代码正常工作,可以将输入文件重新定义为
[
{'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()
您需要将代码中的数据放在一个文件test.py中。脚本将写入文件data/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),
为什么该文件命名为.csv?另外,该文件似乎是一个有效的Python字典列表?你能控制文件名吗?因为这样你就可以把它变成一个.py,只需导入它并直接作为一个有效的Python数据结构使用。当你说cols=nobel_winners[0]。keys()
nobel_winners
分配了什么?您可能没有根据错误定义该变量。您的nobel_winners.csv
不是csv文件,而是普通Python文件。将其重命名为nobel\u winners.py
并从nobel\u winners import*