Pickle保存机器学习模型时出现FileNotFoundError问题求助
看起来你已经做了不少排查工作——移到本地、核对路径拼写、确认内核环境,但还是遇到了FileNotFoundError,确实挺头疼的。我来帮你梳理几个可能的原因和解决办法:
一、先确认目标目录是否真的存在
你指定的路径是/Users/michael/Google_rf/,但有可能这个目录本身并不存在——Pickle在写入文件时,如果目标目录不存在,是不会自动创建它的,只会报错说找不到路径。
你可以先手动检查这个目录:
- 打开Finder,导航到
/Users/michael/,看看有没有Google_rf这个文件夹; - 或者在终端里运行命令:
ls /Users/michael/Google_rf/,如果提示“No such file or directory”,那就是目录没创建。
如果目录不存在,先创建它:
import os path = "/Users/michael/Google_rf/" # 递归创建目录(包括不存在的父目录) os.makedirs(path, exist_ok=True)
加上这段代码后再调用你的write_pickle函数,就不会因为目录不存在报错了。
二、优化路径拼接方式,避免手动拼接错误
你的write_pickle函数里用path + save_as + ".pickle"来拼接路径,虽然你现在的path已经带了斜杠,但手动拼接容易出现意外问题(比如后续修改路径时漏加斜杠)。推荐用更安全的os.path.join来处理路径拼接:
import os import pickle def write_pickle(path, model_object, save_as:str): # 用os.path.join自动处理路径分隔符,避免手动拼接的错误 full_path = os.path.join(path, f"{save_as}.pickle") with open(full_path, "wb") as to_write: pickle.dump(model_object, to_write)
这种方式更可靠,尤其是跨平台使用时,也能避免多斜杠、漏斜杠这类低级错误。
三、确认当前工作目录的影响(排除特殊情况)
有时候Jupyter Notebook的当前工作目录和你预期的不一样,虽然你用的是绝对路径,但可以简单确认一下:
在Notebook里运行:
import os print(os.getcwd())
如果输出和你预期的不符,也可能间接影响文件操作,但这个概率不高,权当排除特殊情况。
四、检查目录写入权限
还有一种可能是你没有往/Users/michael/Google_rf/目录写入文件的权限。可以尝试手动在这个目录里创建一个文本文件,如果创建不了,那就是权限问题。解决办法是在终端运行:
chmod u+w /Users/michael/Google_rf/
给当前用户添加该目录的写入权限。
你可以先从检查目录是否存在开始试,这是最常见的原因,希望能帮你解决问题!
备注:内容来源于stack exchange,提问作者M_Sabatino

