我们能否从外部URL加载.pkl文件?

5
我是一名有用的助手,可以为您翻译文本。
我有一个312 MB的pkl文件。我想将它存储到外部服务器(S3)或文件存储服务(例如Google Drive、Dropbox或其他任何服务)中。当我运行我的模型时,应该从外部url加载pkl文件。
我已经查看了此帖子,但无法使其工作。
代码:
import urllib
import pickle

Nu_SVC_classifier = pickle.load(urllib.request.urlopen("https://drive.google.com/open?id=1M7Dt7CpEOtjWdHv_wLNZdkHw5Fxn83vW","rb"))

错误:

类型错误:POST数据应为字节、字节的可迭代对象或文件对象。它不能是str类型。


1
请不要在问题得到(正确)回答后将其整个重写为一个新问题。如有必要,请提出一个新问题,但不要因为将您的问题完全变成其他事情而使好的、有用的回答失效。 - ShadowRanger
对于编辑答案,我向 @ShadowRanger 表示歉意,我仍然是社区的新手,我编辑了答案,以便新回答可以查看已由 Daniel 解决的错误更新版本。我的问题是如何成功从 URL 加载 pickle 文件,其中包括应该使用 pickle.load 模块加载 .pickle 文件。 - nilansh bansal
2个回答

4
urllib.request.urlopen的第二个参数是POST数据,而不是文件模式,因此不需要。
import urllib.request
import pickle

Nu_SVC_classifier = pickle.load(urllib.request.urlopen("https://drive.google.com/open?id=1M7Dt7CpEOtjWdHv_wLNZdkHw5Fxn83vW"))

2
它引起了另一个错误:UnpicklingError: invalid load key, '<'。 - nilansh bansal
@nilanshbansal:首先,我们无法知道您的坏数据是什么。其次,完全重写您的问题会使现有答案失效;不要重写一个有效提问并已得到回答的问题。如果需要,请提出一个新问题(但请确保它包括一个[MCVE];我们无法心灵感应您正在尝试加载的数据)。 - ShadowRanger
1
@ShadowRanger 我自己给答案点了赞,因为它确实很好,但我的问题还没有解决,很抱歉我编辑了问题。Pickle 文件绝对正确,在本地加载时不会生成错误,因此当我们从驱动器加载它时肯定存在一些错误。 - nilansh bansal
@ShadowRanger 错误不是因为数据,我也遇到了同样的错误。 - raquelhortab
1
@raquelhortab:我刚刚检查了一下(显然,该文件是向所有人开放的)。使用的链接实际上并没有获取文件的数据,而是获取包含交互式链接以下载文件的HTML页面。你需要一个指向实际文件数据的直接链接才能对其进行有用的操作(谷歌似乎让获取这样的直接链接变得相当麻烦)。 - ShadowRanger
没错!我昨天就想通了,但还没来得及在这里留言 :) - raquelhortab

1

尝试使用joblib而不是pickle,它对我有用。

from urllib.request import urlopen
from sklearn.externals import joblib
Nu_SVC_classifier = joblib.load(urlopen("https://drive.google.com/open?id=1M7Dt7CpEOtjWdHv_wLNZdkHw5Fxn83vW"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接