import csv
with open("insurance.csv", newline = "", ) as insurance_data:
insurance_reader = csv.DictReader(insurance_data)
两个代码部分位于2个不同的笔记本块中
#calculate and seperate BMI categories
def bmi_categories(file):
obese_counter = 0
overweight_counter = 0
for item[BMI] in file:
if item[BMI] > 25 and item[BMI]<= 30:
overweight_counter +=1
elif item[BMI] > 30:
obese_counter += 1
else:
pass
bmi_categories(insurance_data)
我试着创建一个函数,它将数据集中的BMI,目前是字典格式的,并用函数计算数据集中有多少肥胖/超重。
2条答案
按热度按时间g9icjywg1#
DictReader仅创建对象。当您使用With语句打开文件时,一旦代码到达“with”块下方,该文件读取器对象将关闭。因此,当您尝试使用它时,会出现关闭文件异常。解决方案可能很简单:只需将使用insurance_reader的代码移到with块下。
否则,为了更好地控制,我宁愿使用pandas.read_csv函数。对于打开函数,考虑使用mode='r'以只读模式打开文件。
z2acfund2#
insurance_data
是文件描述符。您不能在第二个块中使用它,因为它在第一个块中已经关闭(由于with语句)。
您似乎要使用在第一个块中构建的DictReader。
将
bmi_categories(insurance_data)
替换为bmi_categories(insurance_reader)
。