gpt4 book ai didi

具有动态长度的Python进度条

转载 作者:太空宇宙 更新时间:2023-11-04 05:44:42 25 4
gpt4 key购买 nike

我正在编写一个网络爬虫来发现链接并处理页面信息。

因为这可能是一个没有尽头的过程,所以我不知道在构建进度条时我有多少元素,比如 5 个链接已完成/谁知道我们什么时候完成。

但我确实知道我访问了多少个链接以及我检测到了多少个链接。

因此访问的链接数/检测到的链接数。

我想做的是使用像点击或其他东西的 api 来制作进度条。

条的长度可以改变的地方,即我可以更新检测到的条...想象一个加载条,用户是 90%,突然下降到 10%。真可惜哈哈'

查看点击 api,似乎有两种使用进度条的方法。

with click.progressbar(all_the_users_to_process) as bar:
for user in bar:
modify_the_user(user)

with click.progressbar(length=total_size,
label='Unzipping archive') as bar:
for archive in zip_file:
archive.extract()
bar.update(archive.size)

Progress Bar

我可以使用点击进度条来完成我上面描述的内容吗?

如果我做不到,我需要制作一个进度条,其中完成值随变化... 90% -> 10% -> 20%。

谢谢!

编辑:更多细节

我有一个对象列表,称为 LinkElements。这些元素有一个已访问的 bool 值。

我在想我可能会更新迭代器:

with click.progressbar(like_elements_list) as link_elements:
for link in link_elements:
... do stuff with link ....
link_elements.update(like_elements_list)

虽然这个想法似乎行不通......或者我不理解它

最佳答案

它不受支持,但您可以使用点击来提供您正在寻找的功能。

import click

links_visited = 0
links_detected = 100

with click.progressbar(length=1000) as bar:
for link in link_elements_list:

# ... do stuff ...

links_visited += 1
links_detected += 0 # Increment how many more new links were found

progress = float(links_visited) / float(links_detected)
bar.pos = int(progress * 999) + 1
bar.update(0)

您通过 bar.pos 手动移动进度条,然后调用 update(0)。由于 update() 方法以增量方式工作,您可以传入 0 来进行渲染。

现在,我必须注意一些事情:

  • length=1000 我正在硬编码 1000 的值,因此我们可以提供 0-1000 之间的“百分比”。
  • bar.pos = int(progress * 999) + 1 为什么是 +1?那么,当您调用 update() 时,它会尝试计算平均时间,这意味着对于 0bar.pos,您得到除以零的错误。 +1就是为了避免这种情况。

关于具有动态长度的Python进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32729051/

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