如何只下载数据Python的前x个字节

时间:2018-01-15 06:34:46

标签: python python-2.7 download urllib urlretrieve

情况:要下载的文件是一个大文件(> 100MB)。这需要相当长的时间,特别是在互联网连接缓慢的情况下。

问题:但是,我只需要文件头(前512个字节),它将决定是否需要下载整个文件。

问题:有没有办法只下载文件的前512个字节?

其他信息:目前,使用Python2.7中的urllib.urlretrieve

完成下载

2 个答案:

答案 0 :(得分:1)

我认为curlhead在这里比Python解决方案效果更好:

curl https://my.website.com/file.txt | head -c 512 > header.txt

编辑:此外,如果您绝对必须在Python脚本中使用它,则可以使用subprocess执行curl管道到head命令执行

编辑2:对于完全Python解决方案:urlopen函数(Python 2中的urllib2.urlopen和Python 3中的urllib.request.urlopen)返回一个类似文件的流,您可以使用read函数on,允许您指定多个字节。例如,urllib2.urlopen(my_url).read(512)将返回my_url

的前512个字节

答案 1 :(得分:0)

如果您尝试阅读的网址以Content-Length标头回复,那么您可以在Python中使用urllib2获取文件大小。

def get_file_size(url):
    request = urllib2.Request(url)
    request.get_method = lambda : 'HEAD'
    response = urllib2.urlopen(request)
    length = response.headers.getheader("Content-Length")
    return int(length)

可以调用该函数来获取长度并与某个阈值进行比较以决定是否下载。

if get_file_size("http://stackoverflow.com") < 1000000:
    # Download