我如何导入一个csv文件与python和不得到错误(I/O操作关闭文件,)当尝试使用数据从文件

w8f9ii69  于 2022-12-15  发布在  Python
关注(0)|答案(2)|浏览(210)
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,目前是字典格式的,并用函数计算数据集中有多少肥胖/超重。

g9icjywg

g9icjywg1#

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函数。对于打开函数,考虑使用mode='r'以只读模式打开文件。

z2acfund

z2acfund2#

insurance_data是文件描述符。
您不能在第二个块中使用它,因为它在第一个块中已经关闭(由于with语句)。
您似乎要使用在第一个块中构建的DictReader。
bmi_categories(insurance_data)替换为bmi_categories(insurance_reader)

相关问题