在python中下载大文件错误:压缩文件在到达流末尾标记之前结束

Cli*_*com 9 python compression exception urllib stream

我从互联网上下载压缩文件:

with lzma.open(urllib.request.urlopen(url)) as file:
    for line in file:
        ...
Run Code Online (Sandbox Code Playgroud)

下载并处理了大部分文件后,我最终得到错误:

文件"/usr/lib/python3.4/lzma.py",第225行,在_fill_buffer中引发EOFError("压缩文件在"EOFError:压缩文件在达到流末端标记之前结束之前结束"

我认为这可能是因为互联网连接丢失或服务器在一段时间内没有响应.如果是这种情况,那么无论如何都要让它继续尝试,直到重新建立连接,而不是抛出异常.我不认为这是文件的问题,因为我手动从同一个网站手动下载了许多文件并解压缩.我也能用Python下载和解压缩一些较小的文件.我尝试下载的文件的压缩大小约为20 GB.

Pyn*_*hia 3

来自urllib.urlopen 文档:

需要注意的是:如果 size 参数被省略或为负值,则 read() 方法可能直到数据流末尾才读取;在一般情况下,没有好的方法可以确定来自套接字的整个流已被读取。

也许 lzma.open 由于上述原因而出现巨大的大小/连接错误/超时。