2017-04-06 142 views
1

我想在一个python脚本中使用进度条,因为我有一个for循环需要相当多的时间来处理。我已经看过这里的其他解释,但我仍然感到困惑。这里是我的for循环看起来像我的脚本:Python脚本中“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") 

我读了一些关于使用progressbar库,但我的困惑在于,我必须把代码相对进度条支持我的循环我已经包括在这里。

回答

7

使用tqdm

from tqdm import tqdm 

for member in tqdm(members): 
    # current contents of your for loop 

tqdm()需要members和遍历它,但是每次都产生了一个新的成员(在每次循环之间),它还更新你的命令行上的进度条。这实际上与Matthias的解决方案非常相似(在每次循环迭代结束时打印内容),但进度条更新逻辑很好地封装在tqdm的内部。

3

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

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)) 

也许这会有所帮助。

您还可以在for循环中的特定命令之后添加点,以包含更详细的点。

1

我认为这可能是最优雅的以这种方式来解决:

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

for idx, member in enumerate(members): 
    ... 
    bar.update(idx)