tqdm 진행 표시줄에 메시지를 추가할 수 있습니까?
tqdm 진행 표시줄을 사용할 때: 루프의 진행 표시줄과 같은 줄에 메시지를 추가할 수 있습니까?
"tqdm.write" 옵션을 사용하려고 했지만, 모든 쓰기에 새 줄이 추가됩니다.각 반복은 막대 옆에 짧은 메시지를 표시하고 다음 반복에서는 사라집니다.이것이 가능합니까?
Usage of tqdm의 예시는 저에게 잘 맞습니다.
pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:
pbar.set_description("Processing %s" % char)
또는 바다코끼리 연산자를 지원하는 Python 3.8을 시작합니다.
for char in (pbar := tqdm(["a", "b", "c", "d"])):
pbar.set_description(f"Processing {char}")
설명을 변경하여 진행률 표시줄 앞에 다음과 같은 작은 메시지를 표시할 수 있습니다.
from tqdm import trange
from time import sleep
t = trange(100, desc='Bar desc', leave=True)
for i in t:
t.set_description("Bar desc (file %i)" % i)
t.refresh() # to show immediately the update
sleep(0.01)
/EDIT: 최신 릴리스의tqdm
사용할 수 있습니다.t.set_description("text", refresh=True)
(기본값) 및 제거t.refresh()
(Daniel 덕분에).
다른 답변은 동적 설명에 중점을 두지만 정적 설명의 경우 다음을 추가할 수 있습니다.desc
인수를 tqdm 함수에 추가합니다.
from tqdm import tqdm
x = [5]*1000
for _ in tqdm(x, desc="Example"):
pass
Example: 100%|██████████████████████████████████| 1000/1000 [00:00<00:00, 1838800.53it/s]
사용할 수 있습니다.set_postfix
막대에 직접 값을 추가합니다.
예:
from tqdm import tqdm
pbar = tqdm(["a", "b", "c", "d"])
num_vowels = 0
for ichar in pbar:
if ichar in ['a','e','i','o','u']:
num_vowels += 1
pbar.set_postfix({'num_vowels': num_vowels})
사후 수정 사전은 진행률 표시줄에 통합되어 있습니다.
100%|███████████| 4/4 [00:11<00:00, 2.93s/it, num_vowels=1]
사전 대신에, 당신은 사용할 수 있습니다.set_postfix_str
진행률 표시줄의 끝에 문자열을 추가합니다.
저는 개인적으로 그것을 사용하는 것이 훨씬 더 깨끗하다고 생각합니다.with
문:
from tqdm import tqdm
with tqdm(['a','b','c']) as t:
for c in t:
t.set_description(f'{c}')
비록 여기에 있는 모든 답이 맞긴 하지만,tqdm
또한 를 제공합니다.set_postfix_str
방법.보다 유리한 점set_postfix
키 값 쌍 대신 형식화된 문자열을 전달할 수 있습니다.또한.set_postfix
키 값 쌍을 알파벳 순으로 정렬합니다.여기 MWE가 있습니다.
from tqdm import tqdm
import numpy as np
loop_obj = tqdm(np.arange(10))
for i in loop_obj:
loop_obj.set_description(f"Count: {i}") # Adds text before progessbar
loop_obj.set_postfix_str(f"Next count: {i+1}") # Adds text after progressbar
저는 개인적으로 for 루프 앞에 .set_description()과 progression_bar 할당 문을 사용합니다.
from tqdm import tqdm
progression_bar = tqdm(["An", "iterable", "object"])
for element in (progression_bar):
progression_bar.set_description("Processing « %s »" % str(element))
Python에서 tqdm 진행률 표시줄을 사용할 때 with 문을 사용하거나 tqdm() 함수가 있는 변수에 진행률 표시줄을 할당하여 다양한 방법으로 정의할 수 있습니다.경우에 따라 들여쓰기 도면층을 추가하지 않고 루프 내부의 진행률 표시줄을 업데이트할 수 있습니다.
이를 위해 set_postfix() 메서드를 사용하여 진행률 표시줄을 최신 정보로 업데이트할 수 있습니다.들여쓰기 도면층이 추가되지 않도록 하려면 진행률 표시줄을 루프 외부에 정의하고 루프 내부에서 사용할 수 있습니다.예를 들어 enumerate() 함수를 사용하여 인덱스를 추적하면서 목록을 반복한 다음 다음과 같이 진행 표시줄에 전달할 수 있습니다.
from tqdm import tqdm
object_list = ["a", "b", "c"]
pbar = tqdm(enumerate(object_list), descr="...")
for i, obj in pbar:
...
pbar.set_postfix("foo")
...
pbar.set_postfix("bar")
이런 방식으로 루프 앞에 tqdm 진행률 표시줄을 정의한 다음 set_postfix() 메서드를 사용하여 추가 들여쓰기 레이어를 추가하지 않고 루프 내부의 진행률 표시줄을 업데이트할 수 있습니다.enumerate() 함수를 사용하면 현재 인덱스에 액세스할 수 있으며, 이 인덱스를 set_postfix() 메서드로 전달하여 진행률 표시줄에 표시할 수 있습니다.
이 접근 방식은 코드를 깨끗하고 읽을 수 있도록 유지하면서 루프 내부의 진행률 표시줄을 업데이트할 수 있는 유연성을 제공합니다.이 답변은 @cbrnr 및 @tim-mb의 의견을 기반으로 합니다.
언급URL : https://stackoverflow.com/questions/37506645/can-i-add-message-to-the-tqdm-progressbar
'programing' 카테고리의 다른 글
한 .R 파일에 모든 함수를 정의하고 다른 .R 파일에서 호출합니다.어떻게, 가능하다면요? (0) | 2023.06.16 |
---|---|
Ruby: Ubuntu에 rmagick 설치하기 (0) | 2023.06.16 |
비어 있는 경우 MariaDB/MySQL에서 defaults-group-suffix로 작업 (0) | 2023.06.16 |
피클 파일을 읽는 방법? (0) | 2023.06.11 |
Python 정규식이 true/false를 반환합니다. (0) | 2023.06.11 |