lea*_*ner 20 python pycharm tqdm
下面的问题是针对使用 PyCharm 的人。\n有嵌套for循环,tqdm用于与每个for循环对应的进度条。代码如下所示。
from tqdm import tqdm\nimport time\n\nfor i in tqdm(range(5), desc="i", colour='green'):\n for j in tqdm(range(10), desc="j", colour='red'):\n time.sleep(0.5)\nRun Code Online (Sandbox Code Playgroud)\n但问题是,每次进度条中有更新时,内部循环的进度条都会以换行符显示,如下所示。
\ni: 0%| | 0/5 [00:00<?, ?it/s]\nj: 0%| | 0/10 [00:00<?, ?it/s]\nj: 10%|\xe2\x96\x88 | 1/10 [00:00<00:04, 1.94it/s]\nj: 20%|\xe2\x96\x88\xe2\x96\x88 | 2/10 [00:01<00:04, 1.94it/s]\nj: 30%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 3/10 [00:01<00:03, 1.96it/s]\nj: 40%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 4/10 [00:02<00:03, 1.96it/s]\nj: 50%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 5/10 [00:02<00:02, 1.97it/s]\nj: 60%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 6/10 [00:03<00:02, 1.97it/s]\nj: 70%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 7/10 [00:03<00:01, 1.97it/s]\nj: 80%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 8/10 [00:04<00:01, 1.98it/s]\nj: 90%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 9/10 [00:04<00:00, 1.98it/s]\nj: 100%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88| 10/10 [00:05<00:00, 1.98it/s]\ni: 20%|\xe2\x96\x88\xe2\x96\x88 | 1/5 [00:05<00:20, 5.06s/it]\nj: 0%| | 0/10 [00:00<?, ?it/s]\nj: 10%|\xe2\x96\x88 | 1/10 [00:00<00:04, 2.00it/s]\nj: 20%|\xe2\x96\x88\xe2\x96\x88 | 2/10 [00:01<00:04, 1.99it/s]\nj: 30%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 3/10 [00:01<00:03, 1.99it/s]\nj: 40%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 4/10 [00:02<00:03, 1.99it/s]\nj: 50%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 5/10 [00:02<00:02, 1.99it/s]\nj: 60%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 6/10 [00:03<00:02, 1.99it/s]\nj: 70%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 7/10 [00:03<00:01, 1.99it/s]\nj: 80%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 8/10 [00:04<00:01, 1.99it/s]\nj: 90%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 9/10 [00:04<00:00, 1.99it/s]\nj: 100%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88| 10/10 [00:05<00:00, 1.99it/s]\ni: 40%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88 | 2/5 [00:10<00:15, 5.05s/it]\n\nRun Code Online (Sandbox Code Playgroud)\n为每个循环设置参数“position”也不能解决问题。
\nfrom tqdm import tqdm\nimport time\n\nfor i in tqdm(range(5), desc="i", colour='green', position=0):\n for j in tqdm(range(10), desc="j", colour='red', position=1):\n time.sleep(0.5)\nRun Code Online (Sandbox Code Playgroud)\n如何让进度条在同一行更新?
\nlea*_*ner 29
解决方案有两个方面。
\n转到“编辑配置”。单击正在使用的运行/调试配置。应该有一个选项“在输出控制台中模拟终端”。检查一下。添加图像以供参考。\n
随着position参数也设置leave参数。代码应该如下所示。我已添加,ncols以便进度条不会占据整个控制台。
from tqdm import tqdm\nimport time\n\nfor i in tqdm(range(5), position=0, desc="i", leave=False, colour=\'green\', ncols=80):\n for j in tqdm(range(10), position=1, desc="j", leave=False, colour=\'red\', ncols=80):\n time.sleep(0.5)\nRun Code Online (Sandbox Code Playgroud)\n现在运行代码时,控制台的输出如下所示。
\ni: 20%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x8d | 1/5 [00:05<00:20, 5.10s/it]\nj: 60%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x8c | 6/10 [00:03<00:02, 1.95it/s]\n\nRun Code Online (Sandbox Code Playgroud)\n更新发生在同一行上。
\n这是一个也适用于 PyCharm SSH 解释器的解决方案(我使用的是 2021.3.1(专业版),并且没有“在输出控制台中模拟终端”选项):
from tqdm.auto import tqdm
for i in tqdm(range(10), position=0, leave=True):
for index in tqdm(range(10), position=0, leave=True):
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16584 次 |
| 最近记录: |