我正在尝试在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循环的进度条的位置。
答案 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
答案 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")