import csv
with open("insurance.csv", newline = "", ) as insurance_data:
insurance_reader = csv.DictReader(insurance_data)
两个代码段在两个不同的笔记本块
#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,并通过函数计算数据集中有多少肥胖/超重。
DictReader只创建对象。当你用with语句打开文件时,一旦代码低于"with"块。因此,当您尝试使用它时,您会得到关闭文件异常。解决方案可能很简单:只需将使用insurance_reader的代码移到with块下。
import csv
with open("insurance.csv", newline = "", ) as insurance_data:
insurance_reader = csv.DictReader(insurance_data)
for row in insurance_reader:
#call function on row here
#here is reader closed, do not use insurance_reader object
否则,为了更好的控制,我宁愿使用pandas。read_csv函数。对于open函数,可以考虑使用mode='r'以只读模式打开文件。
insurance_data
为文件描述符。
你不能在第二个块中使用它,因为它在第一个块中已经关闭了(由于with语句)。
看起来您想要使用您在第一个块中构建的DictReader。
用bmi_categories(insurance_reader)
代替bmi_categories(insurance_data)