蟒蛇的urllib2下载大小(python urllib2 download size)

2019-07-30 19:43发布

iwant下载与urllib2的文件,同时我想显示一个进度条..但我怎样才能得到实际的下载文件大小?

我当前的代码是

ul = urllib2.urlopen('www.file.com/blafoo.iso')
data = ul.get_data()

要么

open('file.iso', 'w').write(ul.read())

数据首先被写入该文件,如果整个下载从网站收到。 我如何可以访问下载的数据的大小?

谢谢你的帮助

Answer 1:

下面是一个使用真棒文本进度条的例子请求库和进度库:

import requests
import progressbar

ISO = "http://www.ubuntu.com/start-download?distro=desktop&bits=32&release=lts"
CHUNK_SIZE = 1024 * 1024 # 1MB

r = requests.get(ISO)
total_size = int(r.headers['content-length'])
pbar = progressbar.ProgressBar(maxval=total_size).start()

file_contents = ""
for chunk in r.iter_content(chunk_size=CHUNK_SIZE):
    file_contents += chunk
    pbar.update(len(file_contents))

这是我在同时运行控制台中看到:

$ python requests_progress.py
 90% |############################   |

编辑:一些注意事项:

  • 并非所有的服务器提供了一个Content-Length头,所以在这种情况下,你不能提供一个百分比
  • 你可能不希望在读取内存中的整个文件,如果它的大。 你可以写块到一个文件,或者其他地方。


Answer 2:

您可以使用info的urllib2返回的功能the meta-information of the page比你可以使用getheaders访问Content-Length

例如,让我们计算的下载大小Ubuntu 12.04 ISO

>>> info = urllib2.urlopen('http://mirror01.th.ifl.net/releases//precise/ubuntu-12.04-desktop-i386.iso')
>>> size = int(info.info().getheaders("Content-Length")[0])
>>> size/1024/1024
701
>>>


Answer 3:

import urllib2
with open('file.iso', 'wb') as output: # Note binary mode otherwise you'll corrupt the file
    with urllib2.urlopen('www.file.com/blafoo.iso') as ul:
        CHUNK_SIZE = 8192
        bytes_read = 0
        while True:
            data = ul.read(CHUNK_SIZE)
            bytes_read += len(data) # Update progress bar with this value
            output.write(data)
            if len(data) < CHUNK_SIZE: #EOF
                break


文章来源: python urllib2 download size