我试图在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 秒
我认为这可以通过以下方式最优雅地解决:
import progressbar
bar = progressbar.ProgressBar(maxval=len(members)).start()
for idx, member in enumerate(members):
...
bar.update(idx)
Run Code Online (Sandbox Code Playgroud)
循环进度条的基本思想是在循环内插入点来更新进度条。一个例子是这样的:
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 循环中的某些命令后添加点来包含更详细的命令。
| 归档时间: |
|
| 查看次数: |
11540 次 |
| 最近记录: |