python3中open()函数的文件路径出现问题



我试图在我的机器学习API上加载一个pickle文件,但我不断收到路径错误。

model = pickle.load(open(scaler_filepath, 'rb'))

但由于某种原因,我得到了一个错误,即找不到文件:FileNotFoundError:[Erno 2]没有这样的文件或目录:'..\\\\型号\\lr_scaler.pkl'

这就是我加载pickle文件的方式:

model_path = os.path.join(os.path.pardir,os.path.pardir,'models')
scaler_filepath = os.path.join(model_path, 'lr_scaler.pkl')
model_filepath = os.path.join(model_path, 'lr_model.pkl')
scaler = pickle.load(open(scaler_filepath, 'rb'))
model = pickle.load(open(model_filepath, 'rb'))

这给了我FileNotFoundError。将路径设置为原始字符串也不起作用,但重要的是,如果我打印以检查路径:

print(model_filepath)
print(os.path.getsize(scaler_filepath))

它返回正确的路径和文件大小:

。。\型号\lr_model.pkl

1227

所以看起来路径是正确的,但由于某种原因,当我在pickle.load((中打开它们时,它们不起作用

甚至使用原始字符串

scaler = pickle.load(open(r'....modelslr_scaler.pkl', 'rb'))
model = pickle.load(open(r'....modelslr_model.pkl', 'rb'))

我仍然得到:[Erno 2]没有这样的文件或目录:'..\\\\型号\\lr_scaler.pkl'

将\切换到/也不起作用。不知道还能做什么:(

编辑:如果我用print(os.path.exists(model_filepath))检查路径,就会发生这种情况:

True 
True 
* Serving Flask app "machine_learning_api" (lazy loading) 
* Environment: development 
* Debug mode: on 
* Restarting with stat 
False 
False

我得到了FileNotFoundError

用测试

print(os.getcwd())
print(os.path.exists(model_filepath))
print(os.path.exists(scaler_filepath))

并且发现工作目录正在被改变,因此当API重新启动时它打破了相对路径。

C:pythonprojectsml-modelsrcmodels
True
True
* Serving Flask app "machine_learning_api" (lazy loading)
* Environment: development
* Debug mode: on
* Restarting with stat
C:pythonprojectsml-model
False
False

在ml-model文件夹中保存API脚本并设置

model_path = os.path.join(os.getcwd(),'models')

修复它。

最新更新