2024-05-18 17:52:00 发布
网友
情况:要下载的文件是一个大文件(大于100MB)。这需要相当长的时间,尤其是在网速慢的情况下。在
问题:但是,我只需要文件头(前512字节),它将决定是否需要下载整个文件。在
问:有没有办法只下载文件的前512个字节?在
附加信息:当前下载是使用urllib.url检索在Python2.7中
我认为curl和{}比这里的Python解决方案更好:
curl
curl https://my.website.com/file.txt | head -c 512 > header.txt
EDIT:另外,如果您必须在Python脚本中使用它,那么可以使用subprocess来执行curl管道到head命令
subprocess
head
编辑2:对于完整的Python解决方案:urlopen函数(urllib2.urlopen在Python 2中,urllib.request.urlopen在Python 3中)返回一个类似文件的流,您可以使用read函数来指定字节数。例如,urllib2.urlopen(my_url).read(512)将返回my_url的前512个字节
urlopen
urllib2.urlopen
urllib.request.urlopen
read
urllib2.urlopen(my_url).read(512)
my_url
如果您试图读取的url以Content-Length头响应,那么您可以在python2中使用urllib2获得文件大小。在
Content-Length
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)
可以调用该函数来获取长度,并与某个阈值进行比较以决定是否下载。在
(请注意,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)
我认为}比这里的Python解决方案更好:
curl
和{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
获得文件大小。在可以调用该函数来获取长度,并与某个阈值进行比较以决定是否下载。在
^{pr2}$(请注意,Python3的实现略有不同:)
相关问题 更多 >
编程相关推荐