如何在不通过python下载的情况下从链接获取文件大小?

时间:2019-03-18 16:54:57

标签: python get

我有一个链接列表,我试图确定这些链接的大小,以确定每个文件需要多少计算资源。是否可以通过get请求或类似的方法获取文件大小?

以下是其中一个链接的示例:https://sra-download.ncbi.nlm.nih.gov/traces/sra46/SRR/005150/SRR5273887

谢谢

3 个答案:

答案 0 :(得分:1)

如果您使用的是Python 3,则可以使用urlopen中的urllib.request

from urllib.request import urlopen
link =  "https://sra-download.ncbi.nlm.nih.gov/traces/sra46/SRR/005150/SRR5273887"
site = urlopen(link)
meta = site.info()
print(meta)

这将输出:

Server: nginx
Date: Mon, 18 Mar 2019 17:02:40 GMT
Content-Type: application/octet-stream
Content-Length: 578220087
Last-Modified: Tue, 21 Feb 2017 12:13:19 GMT
Connection: close
Accept-Ranges: bytes

Content-Length属性是文件的大小,以字节为单位。

答案 1 :(得分:1)

您需要使用HEAD方法。该示例使用请求(pip install requests)。

#!/usr/bin/env python
# display size of remote file without downloading

import sys
import requests

# pass URL as first argument
response = requests.head(sys.argv[1], allow_redirects=True)

size = response.headers.get('content-length', -1)

# print size in megabytes
print('\t{:<40}: {:.2f} MB'.format('FILE SIZE', int(size) / float(1 << 20)))

如果您想要基于标准库的解决方案,也请参见How do you send a HEAD HTTP request in Python 2?

答案 2 :(得分:1)

为此,请使用HTTP HEAD方法,该方法仅获取URL的标头信息,而不会像HTTP GET请求那样下载内容。

$curl -I https://sra-download.ncbi.nlm.nih.gov/traces/sra46/SRR/005150/SRR5273887
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 18 Mar 2019 16:56:35 GMT
Content-Type: application/octet-stream
Content-Length: 578220087
Last-Modified: Tue, 21 Feb 2017 12:13:19 GMT
Connection: keep-alive
Accept-Ranges: bytes

文件大小在“ Content-Length”标题中。在Python 3.6中:

>>> import urllib
>>> req = urllib.request.Request('https://sra-download.ncbi.nlm.nih.gov/traces/sra46/SRR/005150/SRR5273887', 
                                 method='HEAD')
>>> f = urllib.request.urlopen(req)
>>> f.status
200
>>> f.headers['Content-Length']
'578220087'