【问题标题】:Having trouble with the file path on open() function in python3 [closed]python3中open()函数的文件路径有问题[关闭]
【发布时间】:2021-05-01 03:47:47
【问题描述】:

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

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

但由于某种原因,我收到一个错误,即找不到文件:FileNotFoundError: [Errno 2] No such file or directory: '..\\..\\models\\lr_scaler.pkl'

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

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))

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

..\..\models\lr_model.pkl

1227

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

即使使用原始字符串

scaler = pickle.load(open(r'..\..\models\lr_scaler.pkl', 'rb'))

model = pickle.load(open(r'..\..\models\lr_model.pkl', 'rb'))

我仍然得到:[Errno 2] 没有这样的文件或目录:'..\\..\\models\\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

【问题讨论】:

  • 很不清楚的问题...请edit您的问题提供minimal reproducible example
  • 如果您能够使用您的操作系统找到该文件,如果您将文件复制到其他路径并尝试从该路径打开它会发生什么?
  • @KarlKnechtel 这很不友好。 OP 展示了os.path.getsize() 如何报告文件的正确大小,因此我们知道文件存在于文件系统中。因此,让我们帮助 OP 找出为什么 os.path.getsize()pickle.load() 看待事物的方式不同。
  • @Remssett_HP 话虽如此,我还是要问一个愚蠢的问题:你证明os.path.getsize() 看到lr_model.pkl,但你也可以用它看到lr_scaler.pkl 吗?我尝试重现您的问题没有奏效 - 我刚刚创建的带有泡菜文件的类似代码工作得很好。
  • 好的,这是可以调查的问题。下一步是调试在重新启动过程中出现问题的位置。您还可以检查当前工作目录是否已更改。

标签: python python-3.x encoding pickle


【解决方案1】:

经过测试

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

结果发现工作目录正在更改,因此在 API 重新启动时它破坏了相对路径。

C:\python\projects\ml-model\src\models
True
True
 * Serving Flask app "machine_learning_api" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Restarting with stat
C:\python\projects\ml-model
False
False

将 API 脚本保存到 ml-model 文件夹并进行设置

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

修复它。

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多