【问题标题】:Only 1 KB of file is downloading, instead of the whole thing in Python只有 1 KB 的文件正在下载,而不是 Python 中的全部内容
【发布时间】:2019-02-17 06:17:19
【问题描述】:

我尝试使用urllibrequestswget。这三个都不起作用。

我正在尝试从 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


【解决方案1】:

请显示完整的代码和您用于下载文件的确切行。记住你需要使用

r=requests.get("direct_URL_of_your_file.npz").content
        with open("local_file.npz",'wb') as f:
            f.write(r)

还要确保 URL 是直接下载链接。

【讨论】:

  • 对于请求,我使用了与您在此处编写的完全相同的代码。 URL 是这样的:http://example.com/dist/x.npz.
  • 尝试使用终端而不是写入文件,尝试打印它以查看它返回的内容。有时由于 URL 错误,可能会返回“Error:404”。
  • 我同时使用了终端并使用python 命令运行了.py 文件,仍然没有工作。
  • 尝试将 npz 添加到 GitHub 并使用原始 GitHub 链接并分享结果。这会将讨论分为讨论问题是 url 还是 npz 文件。
  • 在问题中,我提到当我用浏览器下载文件时,我没有收到任何错误。我阅读浏览器下载的文件没有问题。问题可能与 python 有关 - python 无法正确下载文件。
【解决方案2】:

问题是服务器需要运行 javascript 作为安全预防措施。因此,当我发送请求时,我得到的只是带有“此站点需要 Javascript 才能工作”的 html。我发现在请求期间需要传递一个__test cookie。

This answer 充分解释了它。 This video 也可能有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多