前言之所以学这个是因为我用了一个依赖tqdm的包,然后怀着好奇查了一下。python中的进度条也是经常用到的,比如包的安装,一些模型的训练也会通过进度条体现模型训练的进度。总之,使用进度条可以更加锦上添花,提升用户体验。更多tqdm内容请参考tqdm官网[1],往下看。1简单理解先来看看效果,用一个循环显示一个智能进度条——用tqdm(iterable)包裹任意一个iterable即可,如下:tqdm运行相关代码如下:importtqdmimporttimeforiintqdm.tqdm(range(1000)):time.sleep(0.1)官方也给了一张图,大家看一下:run2看起来还不错,现在详细看一下。2不用多说,使用安装,直接使用pipinstalltqdm即可。tqdm主要有以下三种用法。2.1基于可迭代的用例如下,使用tqdm()传入任何可迭代参数:fromtqdmimporttqdmfromtimeimportsleeptext=""forcharintqdm(["a","b","c","d"])一个特殊的优化案例of:sleep(0.25)text=text+chartqdm(range(i)):fromtimeimportsleepfromtqdmimporttrangeforiintrange(100):sleep(0.01)使得range(100)等迭代器可以不同的传入,trange()自己构建。此外,您可以使用tqdm()在循环外手动控制一个可迭代类型,如下所示:pbar=tqdm(["a","b","c","d"])forcharinpbar:sleep(0.25)这里也使用了pbar.set_description("Processing%s"%char).set_description(),结果如下:Processingd:100%|██████████|4/4[00:01<00:00,3.99it/s]相关参数后面会介绍。2.2手动操作(Manual)使用with语句手动控制tqdm的更新,进度条的进度可以根据具体的任务进行更新。withtqdm(total=100)aspbar:foriinrange(10):sleep(0.1)pbar.update(10)当然with的语句想必大家都知道吧(如果想到用with打开文件),也可以不使用with就搞定了,然后就是下面的操作:pbar=tqdm(total=100)foriinrange(10):sleep(0.1)pbar.update(10)pbar.close()然后这个时候不要忘了结束后要关闭,或者deltqdmobjectup。2.3模块也许tqdm的最佳用途是在脚本或命令行中。只需在管道之间插入tqdm(或python-mtqdm)即可将所有标准输入通过管道传输到标准输出,同时将进度打印到标准错误。让我们来看看如何去做。下面是一个官方的例子。下面的例子演示了统计当前目录下所有Python文件的行数,包括时间信息。(为了能在windows系统下使用linux命令,这里用git打开),也是当前项目路径。timefind.-name'*.py'-typef-execcat\{}\;|wc-llinux命令补充:time[2],find[3](-exec使用其后续参数对找到的文件进行操作);wc[4].使用tqdm命令试试:timefind.-name'*.py'-typef-execcat\{}\;|tqdm|wc-l有:tqdm注意,也可以指定tqdm的通用参数。如下:暂时先说到这里吧,感觉内容有点跑题了,如果对tqdm感兴趣,可以访问官方文档了解更多。3个参数的官方类初始化代码如下:None,=None,mininterval=0.1,maxinterval=10.0,miniters=None,ascii=None,disable=False,unit='it',unit_scale=False,dynamic_ncols=False,smoothing=0.3,bar_format=None,initial=0,position=None,postfix=None,unit_divisor=1000):官方对各个参数的介绍如下::int,optionalThenumberofexpectediterations.Ifunspecified,len(iterable)isusedifpossible.Iffloat("inf")orsalastresort,onlybasicprogressstatisticsaredisplayed(noETA,noprogressbar).如果`gui`为True并且此参数需要后续更新,请指定一个初始的任意大正数整数,例如int(9e9).leave:bool,optionalIf[default:True],keepsalltracesoftheprogressbaruponterminationofiteration.file:`io.TextIOWrapper`or`io.StringIO`,optionalSpecifieswheretooutputtheprogressmessages(default:sys.stderr).Uses`file.write(str)`和`file.flush()`方法。对于编码,请参阅`write_bytes`。ncols:int,可选的整个输出消息的宽度。如果指定,动态调整进度条的大小以保持在此范围内。如果未指定,则尝试使用环境宽度。回退是10的计量器宽度,并且对计数器和统计数据没有限制。如果为0,则不会打印任何计量器(仅统计数据)。mininterval:float,defaultdisminupdateumprogress:0.1]seconds.maxinterval:float,optionalMaximumprogressdisplayupdateinterval[default:10]seconds.Automaticallyadjusts`miniters`tocorrespondto`afterlongdisplayupdatelag.Onlyworksif`dynamic_miniters`ormonitorthreadisenabled.miniters:int,optionalMinimumprogressdisplayupdateinterval,initers.If0and`dynamic_miniters`,willautomaticallyadjusttoequal`mininterval`(moreCPUefficient,goodfortightloops).If>0,willskipdisplayofspecifiednumberofiterations.Tweakthisand`mininterval`togetveryefficientloops.Ifyourprogressiserraticwithbothfastandslowiterations(network,skippingitems,etc)youshouldsetminiters=1.ascii:boolorstr,optionalIfunspecifiedorFalse,useunicode(smoothblocks)tofillthemeter.ThefallbackistouseASCIIcharacters"123456789#“.disable:bool,optionalWhethertodisabletheentireprogressbarwrapper[default:False]。如果设置为None,disableonnon-TTY.unit:str,optionalStringthatwillbeusedtodefinetheunitofeachiteration[default:it].unit_scale:boolorinorfloat,optionalIf1orTrue,thenumberofiterationswillbereduced/scaledautomaticallyandetricprefixfollowingtheInternationalSystemofUnitsstandardwillbeadded,etc.default:standardwillme,等。False].Ifanyothernon-zeronumber,willscale`total`and`n`.dynamic_ncols:bool,optionalIfset,constantlyalters`ncols`totheenvironment(allowingforwindowresizes)[默认值:假]。平滑:浮动,可选的指数移动平均平滑因子用于速度估计(在GUI模式下被忽略)。范围从0(平均速度)到1(当前/瞬时速度)[默认值:0.3]。bar_format:str,可选指定自定义条形字符串格式。可能影响性能。[默认值:'{l_bar}{r_bar}'],wherel_bar='{desc}:{percentage:3.0f}%|'andr_bar='|{n_fmt}/{total_fmt}[{elapsed}<{remaining},''{rate_fmt}{postfix}]'Possiblevars:l_bar,bar,r_bar,n,n_fmt,total,total_fmt,percentage,rate,rate_fmt,rate_noinv,rate_noinv_fmt,rate_inv,rate_inv_fmt,elapsed,elapsed_s,remaining,remaining_s,desc,postfix,unit.Notethatatrailing":"isautomaticallyremovedafter{desc}ifthelatterisempty.initial:int,optionalTheinitialcountervalue.Usefulwhenrestartingaprogressbar[default:0].position:int,optionalSpecifythelineoffsettoprintthisbar(startingfrom0)Automaticifunspecified.Usefultomanagemultiplebarsatonce(eg,fromthreads).postfix:dictor*,optionalSpecifyadditionalstatstodisplayattheendofthebar.Calls`set_postfix(**postfix)`ifpossible(dict).unit_divisor:float,optional[default:1000],ignoredunlessunless`unit_scale`isTrue.write_bytes:bool,optionalIf(default:None)and`file`isunspecified,byteswillbewritteninPython2.If`True`也将写入字节。在所有其他情况下,将默认为unicode.gui:bool,可选警告:内部参数-不要使用.Usetqdm_gui(...)。如果设置,将尝试使用matplotlibanimations进行图形输出[默认值:False]。更多的功能可以根据以上参数发挥你的想象
