为什么我不能关闭 pickle 文件?

Why can't I close a pickle file?

我一直在研究分类器模型,使用 GridSearchCV 寻找最佳超参数。然后我腌制了模型,并将其加载回去(以节省每次我必须 运行 笔记本的时间)。

当我试图关闭它时,出现了这个错误:

AttributeError: 'GridSearchCV' object has no attribute 'close'

这是我的代码:

# Save the Grid Search CV object as a pickle file
pickle.dump(knn_grid, open(r'./knn_grid_model.p', 'wb'))
# load the Grid Search CV object
knn_grid = pickle.load(open(r'./knn_grid_model.p', 'rb'))
# Close the file
knn_grid.close()

知道如何克服这个问题吗?不关闭pickle文件会不会有什么大不了的?

knn_grid 不是文件,它是 GridSearchCV 对象,未被 pickled。

但是,你的第二个问题仍然成立:

Will it be a big deal if I don't close the pickle file?

按照您编写代码的方式,文件可能会保持打开状态,直到被垃圾收集或直到 Python 解释器退出。现在,打开文件进行 阅读 应该不会造成任何问题,但打开文件进行 写入 could cause missing data 应该不会造成任何问题。所以最好的做法是使用一个with语句来确保内容写入并关闭文件:

with open('./knn_grid_model.p', 'wb') as f:
    pickle.dump(knn_grid, f)

with open('./knn_grid_model.p', 'rb') as f:
    knn_grid = pickle.load(f)

(请注意,在这种情况下,r 字符串没有任何区别。)