python 进度条由 'tqdm' 创建,每次迭代后出现意外的 values/symbol
python progress bar created by 'tqdm' followed by unexpected values/symbol after each iteration
我正在使用 'tqdm' 包来建立进度条。但是,在奇数 (1,3,5) 的每次迭代之后,都会出现意外的 value/number(在这种情况下,当参数 'ascii' 等于 True 时出现数字 5)。
Fortschritt: 17%|####5 | 1/6 [00:02<00:11, 2.20s/it]
Fortschritt: 33%|######### | 2/6 [00:07<00:14, 3.54s/it]
Fortschritt: 50%|#############5 | 3/6 [00:13<00:13, 4.65s/it]
代码比较复杂,这里就不复制了。。。如果是查找和解决问题所需要的,以后我会精简贴在这里。
如有任何帮助,我们将不胜感激。 :)
--------代码补充----------
from os import makedirs
from tqdm import tqdm
import time
Workflow = ['0','1', '2', '3', '4', '5', '6']
Probenliste = ['A','B']
Oligos= {'Oligo1':'Sequence1', 'Oligo2':'Sequence2'}
for schritt in tqdm(range(len(Workflow)-1), desc='Fortschritt', ascii=True, ncols=75):
schritt_name = Workflow[schritt+1]
makedirs(schritt_name)
for n in range(len(Probenliste)):
probe = Probenliste[n]
for primer_name, sequence in Oligos.items():
time.sleep(1)
根据[GitHub]: tqdm/tqdm - Documentation(重点是我的):
ascii : bool or str, optional
If unspecified or False, use unicode (smooth blocks) to fill the meter. The fallback is to use ASCII characters " 123456789#".
我试了一下各种参数,我凭经验发现了这一点(我没有严格的解释),因为我没有深入研究代码:
- “funky”值来自字符串:" 123456789#""(当 ascii是真)
- 它们取决于:
- 可迭代(它的长度)
- 条(称为米)本身的长度,取决于desc的长度和[=29的值=]ncols
- 看起来像 #1. 和 [=46= 中的元素索引之间的除法(余数) ]#2.
可以使用更简单的代码重现该行为。
code00.py:
#!/usr/bin/env python
import sys
import time
from tqdm import tqdm
def main(*argv):
data = " " * 6
cols = (
49, # 8, 6, 5, 3, 1, ...
48, # 6, 3, , ...
47, # 5, , ...
46, # 3, 6, , ...
45, # 1, 3, 5, 6, 8, ...
44, #
)
sleep_time = 0.5
print("Various lengths:")
ascii = True
#ascii = " #" # !!! DECOMMENT THIS LINE for the problem to go away !!!
for col in cols:
for _ in tqdm(data, desc="X", ascii=ascii, ncols=col):
time.sleep(sleep_time)
print("\nA combination of parameters that displays all digits")
for _ in tqdm(range(10), desc="X", ascii=True, ncols=50):
time.sleep(sleep_time)
if __name__ == "__main__":
print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
64 if sys.maxsize > 0x100000000 else 32, sys.platform))
rc = main(*sys.argv[1:])
print("\nDone.")
sys.exit(rc)
输出(虽然只有最后一个不是很相关,因为它没有捕捉到行为):
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q071951854]> "e:\Work\Dev\VEnvs\py_pc064_03.09_test0\Scripts\python.exe" code00.py
Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)] 064bit on win32
Various lengths:
X: 100%|###########| 6/6 [00:03<00:00, 1.95it/s]
X: 100%|##########| 6/6 [00:03<00:00, 1.96it/s]
X: 100%|#########| 6/6 [00:03<00:00, 1.95it/s]
X: 100%|########| 6/6 [00:03<00:00, 1.95it/s]
X: 100%|#######| 6/6 [00:03<00:00, 1.96it/s]
X: 100%|######| 6/6 [00:03<00:00, 1.95it/s]
A combination of parameters that displays all digits
X: 100%|##########| 10/10 [00:05<00:00, 1.95it/s]
Done.
修正:
使用字符串 " #"#"(对于 ascii),它只包含初始值char (SPACE) 和最后一个 (POUND, #)。这样,就不会有任何可能的中间 char.
我正在使用 'tqdm' 包来建立进度条。但是,在奇数 (1,3,5) 的每次迭代之后,都会出现意外的 value/number(在这种情况下,当参数 'ascii' 等于 True 时出现数字 5)。
Fortschritt: 17%|####5 | 1/6 [00:02<00:11, 2.20s/it]
Fortschritt: 33%|######### | 2/6 [00:07<00:14, 3.54s/it]
Fortschritt: 50%|#############5 | 3/6 [00:13<00:13, 4.65s/it]
代码比较复杂,这里就不复制了。。。如果是查找和解决问题所需要的,以后我会精简贴在这里。
如有任何帮助,我们将不胜感激。 :)
--------代码补充----------
from os import makedirs
from tqdm import tqdm
import time
Workflow = ['0','1', '2', '3', '4', '5', '6']
Probenliste = ['A','B']
Oligos= {'Oligo1':'Sequence1', 'Oligo2':'Sequence2'}
for schritt in tqdm(range(len(Workflow)-1), desc='Fortschritt', ascii=True, ncols=75):
schritt_name = Workflow[schritt+1]
makedirs(schritt_name)
for n in range(len(Probenliste)):
probe = Probenliste[n]
for primer_name, sequence in Oligos.items():
time.sleep(1)
根据[GitHub]: tqdm/tqdm - Documentation(重点是我的):
ascii : bool or str, optional
If unspecified or False, use unicode (smooth blocks) to fill the meter. The fallback is to use ASCII characters " 123456789#".
我试了一下各种参数,我凭经验发现了这一点(我没有严格的解释),因为我没有深入研究代码:
- “funky”值来自字符串:" 123456789#""(当 ascii是真)
- 它们取决于:
- 可迭代(它的长度)
- 条(称为米)本身的长度,取决于desc的长度和[=29的值=]ncols
- 看起来像 #1. 和 [=46= 中的元素索引之间的除法(余数) ]#2.
可以使用更简单的代码重现该行为。
code00.py:
#!/usr/bin/env python
import sys
import time
from tqdm import tqdm
def main(*argv):
data = " " * 6
cols = (
49, # 8, 6, 5, 3, 1, ...
48, # 6, 3, , ...
47, # 5, , ...
46, # 3, 6, , ...
45, # 1, 3, 5, 6, 8, ...
44, #
)
sleep_time = 0.5
print("Various lengths:")
ascii = True
#ascii = " #" # !!! DECOMMENT THIS LINE for the problem to go away !!!
for col in cols:
for _ in tqdm(data, desc="X", ascii=ascii, ncols=col):
time.sleep(sleep_time)
print("\nA combination of parameters that displays all digits")
for _ in tqdm(range(10), desc="X", ascii=True, ncols=50):
time.sleep(sleep_time)
if __name__ == "__main__":
print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
64 if sys.maxsize > 0x100000000 else 32, sys.platform))
rc = main(*sys.argv[1:])
print("\nDone.")
sys.exit(rc)
输出(虽然只有最后一个不是很相关,因为它没有捕捉到行为):
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q071951854]> "e:\Work\Dev\VEnvs\py_pc064_03.09_test0\Scripts\python.exe" code00.py Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)] 064bit on win32 Various lengths: X: 100%|###########| 6/6 [00:03<00:00, 1.95it/s] X: 100%|##########| 6/6 [00:03<00:00, 1.96it/s] X: 100%|#########| 6/6 [00:03<00:00, 1.95it/s] X: 100%|########| 6/6 [00:03<00:00, 1.95it/s] X: 100%|#######| 6/6 [00:03<00:00, 1.96it/s] X: 100%|######| 6/6 [00:03<00:00, 1.95it/s] A combination of parameters that displays all digits X: 100%|##########| 10/10 [00:05<00:00, 1.95it/s] Done.
修正:
使用字符串 " #"#"(对于 ascii),它只包含初始值char (SPACE) 和最后一个 (POUND, #)。这样,就不会有任何可能的中间 char.