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

时间:2017-04-06 15:37:41

标签: 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") 

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

5 个答案:

答案 0 :(得分:12)

使用tqdm

from tqdm import tqdm

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

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

答案 1 :(得分: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循环中的某些命令之后添加点来包含更详细的一个。

答案 2 :(得分:2)

我认为这可以通过这种方式得到最优雅的解决:

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

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

答案 3 :(得分:1)

对于jupyter-notebook用户,显示进度栏:

from tqdm import tqdm_notebook as tqdm
tqdm().pandas()
for x in tqdm(my_list):
    # do something with x

enter image description here

答案 4 :(得分:0)

或者你可以使用这个(可以用于任何情况):

for i in tqdm (range (1), desc="Loading..."):
    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")