Python脚本中"for"循环的进度条

use*_*184 2 python python-2.7

我试图在python脚本中使用进度条,因为我有一个for循环,需要花费相当多的时间来处理.我已经在这里查看了其他解释,但我仍然感到困惑.这是我的for循环在我的脚本中的样子:

for member in members:
    url = "http://api.wiki123.com/v1.11/member?id="+str(member) 
    header = {"Authorization": authorization_code}
    api_response = requests.get(url, headers=header)
    member_check = json.loads(api_response.text)
    member_status = member_check.get("response") 
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一些关于使用该progressbar库的内容,但我的困惑在于我必须将代码放在支持相对于我在此处包含的for循环的进度条的位置.

MSo*_*H8g 15

使用tqdm:

from tqdm import tqdm

for member in tqdm(members):
    # current contents of your for loop
Run Code Online (Sandbox Code Playgroud)

tqdm()接受members并迭代它,但每次它产生一个新成员(在循环的每次迭代之间),它也会更新命令行上的进度条.这使得它实际上非常类似于Matthias的解决方案(在每次循环迭代结束时打印),但是进度条更新逻辑很好地封装在里面tqdm.


Cat*_*lts 10

显示进度条:

from tqdm import tqdm

for x in tqdm(my_list):
    # do something with x

#### In case using with enumerate:
for i, x in enumerate( tqdm(my_list) ):
    # do something with i and x
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

关于附图的一些说明

49%: 已经完成了整个过程的49%

979/2000:处理 2000 个元素/迭代中的第 979 个元素/迭代

01:50: 已经运行了1分50秒

01:55: 估计剩余运行时间

8.81 it/s:平均而言,遍历每个元素/迭代需要 8.81 秒


Joo*_*uel 8

我认为这可以通过以下方式最优雅地解决:

import progressbar

bar = progressbar.ProgressBar(maxval=len(members)).start()

for idx, member in enumerate(members):
    ...
    bar.update(idx)
Run Code Online (Sandbox Code Playgroud)


Mat*_*ias 5

循环进度条的基本思想是在循环内插入点来更新进度条。一个例子是这样的:

membersProcessed = 0
for member in members:
    url = "http://api.wiki123.com/v1.11/member?id="+str(member) 
    header = {"Authorization": authorization_code}
    api_response = requests.get(url, headers=header)
    member_check = json.loads(api_response.text)
    member_status = member_check.get("response") 

    membersProcessed += 1
    print 'Progress: {}/{} members processed'.format(membersProcessed, len(members))
Run Code Online (Sandbox Code Playgroud)

也许这有帮助。

您还可以通过在 for 循环中的某些命令后添加点来包含更详细的命令。