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

2024-05-18 17:52:00 发布

您现在位置:Python中文网/ 问答频道 /正文

情况:要下载的文件是一个大文件(大于100MB)。这需要相当长的时间,尤其是在网速慢的情况下。在

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

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

附加信息:当前下载是使用urllib.url检索在Python2.7中


Tags: 文件信息url字节时间情况urllib办法
2条回答

我认为curl和{}比这里的Python解决方案更好:

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

EDIT:另外,如果您必须在Python脚本中使用它,那么可以使用subprocess来执行curl管道到head命令

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

如果您试图读取的url以Content-Length头响应,那么您可以在python2中使用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)

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

^{pr2}$

(请注意,Python3的实现略有不同:)

from urllib import request

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

相关问题 更多 >

    热门问题