如何创建Python文件下载进度条3?

2024-04-20 04:15:54 发布

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

我现在有这个:

def download_dropbox(url, pre_file_name):
    file = url[42:]
    file = file[:-5]
    file_name = pre_file_name + file
    print('Downloading from ' + url + ' to ' + file_name)
    print(file)
    u = urllib.request.urlopen(url)
    data = u.read()
    u.close()

    with open(file_name, "wb") as f:
        f.write(data)
    print('Download Completed from ' + url + ' and saved to ' + file_name)

这基本上是从dropbox下载文件并将其保存到一个目录中。不过,我希望能够有一些文本进度条,如:


[===]50%


或者


50%

我认为最困难的部分是使用加载栏模块等任何外部模块来实现它。谢谢。在

编辑:

感谢Martin Evans的数据读取,同时循环和进度条,以下是代码的最终结果:

^{pr2}$

Tags: 模块to进度条namefromurldatadownload
2条回答

您可以使用print with \r开头的\r转到行的开头并覆盖上一个文本(因此,如果要清除字符,则需要使用空格)。下面是一个简单的例子:

from time import sleep
x = 0
while x < 20:
    print('\r' + '.' * x, end="")
    x += 1
    sleep(0.1)

要回答您的主要问题“如何制作文本进度条”,您可以使用类似于以下内容的方法给出一个想法:

import time

for n in range(1,101):
    hash = ((60*n)//100)
    print("[{}{}] {}%".format('#' * hash, ' ' * (60-hash), n), end="\r")
    time.sleep(0.05)

这将为您提供以下信息:

^{pr2}$

但是,您的主要问题是,除非您事先已经知道要下载的项目的确切大小,否则没有明显的方法来确定最终将下载多少字节。如果您控制服务器端,那么您可以安排在开始之前获取长度。在

不过,您至少可以先将read()行转换为如下内容:

u = urllib.request.urlopen(url)

data_blocks = []
total = 0

while True:
    block = fd.read(1024)
    data_blocks.append(block)
    total += len(block)
    print("Downloaded {} bytes".format(total), end="\r")

    if not len(block):
        break

data = "".join(data_blocks)
u.close()

通过这样做,你可以一次读一点,然后提供反馈。在

相关问题 更多 >