本文主要是介绍Python 编程杂七杂八-tqdm使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
tqdm可以实时输出处理进度而且占用的CPU资源非常少,支持windows、Linux、mac等系统,支持循环处理、多进程、递归处理、还可以结合linux的命令来查看处理情况,等进度展示。
迭代对象处理
对于可以迭代的对象都可以使用下面这种方式,来实现可视化进度,非常方便
from tqdm import tqdm
import timefor i in tqdm(range(100)):time.sleep(0.1)pass
在使用tqdm的时候,可以将tqdm(range(100))替换为trange(100)代码如下:
from tqdm import tqdm,trange
import timefor i in trange(100):time.sleep(0.1)pass
观察处理的数据
通过tqdm提供的set_description方法可以实时查看每次处理的数据
from tqdm import tqdm
import timepbar = tqdm(["a","b","c","d"])
for c in pbar:time.sleep(1)pbar.set_description("Processing %s"%c)
手动设置处理的进度
通过update方法可以控制每次进度条更新的进度
from tqdm import tqdm
import time#total参数设置进度条的总长度
with tqdm(total=100) as pbar:for i in range(100):time.sleep(0.05)#每次更新进度条的长度pbar.update(1)
除了使用with之外,还可以使用另外一种方法实现上面的效果
from tqdm import tqdm
import time#total参数设置进度条的总长度
pbar = tqdm(total=100)
for i in range(100):time.sleep(0.05)#每次更新进度条的长度pbar.update(1)
#关闭占用的资源
pbar.close()
自定义进度条显示信息
通过set_description和set_postfix方法设置进度条显示信息
from tqdm import trange
from random import random,randint
import timewith trange(100) as t:for i in t:#设置进度条左边显示的信息t.set_description("GEN %i"%i)#设置进度条右边显示的信息t.set_postfix(loss=random(),gen=randint(1,999),str="h",lst=[1,2])time.sleep(0.1)
from tqdm import tqdm
import timewith tqdm(total=10,bar_format="{postfix[0]}{postfix[1][value]:>9.3g}",postfix=["Batch",dict(value=0)]) as t:for i in range(10):time.sleep(0.05)t.postfix[1]["value"] = i / 2t.update()
多层循环进度条
通过tqdm也可以很简单的实现嵌套循环进度条的展示
from tqdm import tqdm
import timefor i in tqdm(range(20), ascii=True,desc="1st loop"):for j in tqdm(range(10), ascii=True,desc="2nd loop"):time.sleep(0.01)
多进程进度条
在使用多进程处理任务的时候,通过tqdm可以实时查看每一个进程任务的处理情况
from time import sleep
from tqdm import trange, tqdm
from multiprocessing import Pool, freeze_support, RLockL = list(range(9))def progresser(n):interval = 0.001 / (n + 2)total = 5000text = "#{}, est. {:<04.2}s".format(n, interval * total)for i in trange(total, desc=text, position=n,ascii=True):sleep(interval)if __name__ == '__main__':freeze_support() # for Windows supportp = Pool(len(L),# again, for Windows supportinitializer=tqdm.set_lock, initargs=(RLock(),))p.map(progresser, L)print("\n" * (len(L) - 2))
pandas中使用tqdm
from tqdm import tqdm
import os.pathdef find_files_recursively(path, show_progress=True):files = []# total=1 assumes `path` is a filet = tqdm(total=1, unit="file", disable=not show_progress)if not os.path.exists(path):raise IOError("Cannot find:" + path)def append_found_file(f):files.append(f)t.update()def list_found_dir(path):"""returns os.listdir(path) assuming os.path.isdir(path)"""try:listing = os.listdir(path)except:return []# subtract 1 since a "file" we found was actually this directoryt.total += len(listing) - 1# fancy way to give info without forcing a refresht.set_postfix(dir=path[-10:], refresh=False)t.update(0) # may trigger a refreshreturn listingdef recursively_search(path):if os.path.isdir(path):for f in list_found_dir(path):recursively_search(os.path.join(path, f))else:append_found_file(path)recursively_search(path)t.set_postfix(dir=path)t.close()return filesfind_files_recursively("E:/")
注意
在使用tqdm显示进度条的时候,如果代码中存在print可能会导致输出多行进度条,此时可以将print语句改为tqdm.write,代码如下
for i in tqdm(range(10),ascii=True):tqdm.write("come on")time.sleep(0.1)
这篇关于Python 编程杂七杂八-tqdm使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!