gpt4 book ai didi

python - 如何查看下载过程?

转载 作者:太空宇宙 更新时间:2023-11-03 15:55:07 24 4
gpt4 key购买 nike

在使用 urllib.request.urlretrieve 时,我想知道是否有办法查看控制台打印的下载状态以及文件大小等信息?

这是我测试的代码:

#!/usr/bin/env python3.5.2

import urllib.request
import os


# make sure to change the directory before you test the code
directory = r'C:\Users\SalahGfx\Desktop\Downloads'

url = 'https://upload.wikimedia.org/wikipedia/en/d/d8/C4D_Logo.png'

def get_name_path():
image_name = url.split('/')[-1]
return os.path.join(directory, image_name)

urllib.request.urlretrieve(url, get_name_path())

print('The Image has been downloaded!')

最佳答案

没有内置任何东西。您必须自己编写。幸运的是,这并不难。您只需要从标题中读取内容的长度,然后按 block 读取响应。这是代码

import urllib2, sys

def chunk_report(bytes_so_far, chunk_size, total_size):
percent = float(bytes_so_far) / total_size
percent = round(percent*100, 2)
sys.stdout.write("Downloaded %d of %d bytes (%0.2f%%)\r" %
(bytes_so_far, total_size, percent))

if bytes_so_far >= total_size:
sys.stdout.write('\n')

def chunk_read(response, chunk_size=8192, report_hook=None):
total_size = response.info().getheader('Content-Length').strip()
total_size = int(total_size)
bytes_so_far = 0

while 1:
chunk = response.read(chunk_size)
bytes_so_far += len(chunk)

if not chunk:
break

if report_hook:
report_hook(bytes_so_far, chunk_size, total_size)

return bytes_so_far

def get_name_path():
image_name = url.split('/')[-1]
return os.path.join(directory, image_name)

# make sure to change the directory before you test the code
directory = r'C:\Users\SalahGfx\Desktop\Downloads'

url = 'https://upload.wikimedia.org/wikipedia/en/d/d8/C4D_Logo.png'

response = urllib.request.urlopen(url, get_name_path())
chunk_read(response, report_hook=chunk_report)

重要的是要注意我使用了 urllib.request.urlopen 因为 urllib2.request.retrieve 被认为是 legacy并将很快被弃用。

关于python - 如何查看下载过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43837162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com