【发布时间】:2019-02-17 06:17:19
【问题描述】:
我尝试使用urllib、requests 和wget。这三个都不起作用。
我正在尝试从 URL 下载 300KB .npz 文件。当我使用wget.download()、urllib.request.urlretrieve() 或requests 下载文件时,不会引发错误。 .npz 文件下载。但是,这个.npz 文件不是 300KB。文件大小仅为 1 KB。此外,该文件不可读 - 当我使用 np.load() 时,会出现错误 OSError: Failed to interpret file 'x.npz' as a pickle。
我也确定该 URL 是有效的。当我使用浏览器下载文件时,np.load() 会正确读取它并且文件大小正确。
非常感谢您的帮助。
编辑 1:
请求了完整的代码。这是代码:
loadfrom = "http://example.com/dist/x.npz"
savedir = "x.npz"
wget.download(loadfrom, savedir)
data = np.load(savedir)
我还使用了带有 urllib 的变体:
loadfrom = "http://example.com/dist/x.npz"
savedir = "x.npz"
urllib.request.urlretrieve(loadfrom, savedir)
data = np.load(savedir)
和请求:
loadfrom = "http://example.com/dist/x.npz"
savedir = "x.npz"
r = requests.get(loadfrom).content
with open("x.npz",'wb') as f:
f.write(r)
data = np.load(savedir)
在上述条件下,它们都产生相同的结果。
【问题讨论】:
-
一个
.npz文件应该是一个zip档案。但是np.load取决于在开始时找到ZIP_PREFIX字符串。如果它查找.npy前缀或pickle前缀失败。所有这些都失败了,然后文件以某种方式损坏,np.load无法读取它。 -
你下载的文件内容是什么?可以分享一下代码吗?
-
@hpaulj 该文件肯定没有损坏。我可以用我的浏览器下载文件,当我这样做时,numpy 可以完美地读取文件。看来问题是python下载文件引起的。
-
下载的文件内容是什么?
-
不,1kb 文件里面有什么?我认为您没有正确编码网址并在该下载中获得 404 页面或其他内容
标签: python numpy url wget urllib