日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

如何在python中使用Tqdm模块

發布時間:2023/12/19 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 如何在python中使用Tqdm模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章將為大家詳細講解有關如何在python中使用Tqdm模塊,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Tqdm 是一個快速,可擴展的Python進度條,可以在 Python 長循環中添加一個進度提示信息,用戶只需要封裝任意的迭代器 tqdm(iterator)。

我的系統是window環境,首先安裝python,接下來就是pip。

pip安裝:

在python根目錄下創建一個get-pip.py的文件,內容:

https://bootstrap.pypa.io/get-pip.py

然后在CMD窗口進入python下面:

輸出:

python-mpipinstall-Upip

由于Tqdm要求的pip版本是9.0所以需要手動安裝pip9.0
http://pypi.python.org/pypi/pip

下載安裝包9.0

然后解壓進入,CMD窗口輸入:python setup.py install

然后就可以安裝Tqdm了,

pipinstalltqdm

安裝最新的開發版的話

pipinstall-egit+https://github.com/tqdm/tqdm.git@master#egg=tqdm

最后看看怎么用呢?https://pypi.python.org/pypi/tqdm

基本用法:

fromtqdmimporttqdm
foriintqdm(range(10000)):
sleep(0.01)

當然除了tqdm,還有trange,使用方式完全相同

foriintrange(100):
sleep(0.1)

只要傳入list都可以:

pbar=tqdm(["a","b","c","d"])
forcharinpbar:
pbar.set_description("Processing%s"%char)

也可以手動控制更新

withtqdm(total=100)aspbar:
foriinrange(10):
pbar.update(10)

也可以這樣:

pbar=tqdm(total=100)
foriinrange(10):
pbar.update(10)
pbar.close()

在Shell的tqdm用法

統計所有python腳本的行數:

$timefind.-name'*.py'-execcat\{}\;|wc-l
857365

real0m3.458s
user0m0.274s
sys0m3.325s

$timefind.-name'*.py'-execcat\{}\;|tqdm|wc-l
857366it[00:03,246471.31it/s]
857365

real0m3.585s
user0m0.862s
sys0m3.358s

使用參數:

$find.-name'*.py'-execcat\{}\;|
tqdm--unitloc--unit_scale--total857366>>/dev/null
100%|███████████████████████████████████|857K/857K[00:04<00:00,246Kloc/s]

備份一個目錄:

$7za-bd-rbackup.7zdocs/|grepCompressing|
tqdm--total$(finddocs/-typef|wc-l)--unitfiles>>backup.log
100%|███████████████████████████████▉|8014/8014[01:37<00:00,82.29files/s]

通過看示范的代碼,我們能發現使用的核心是tqdm和trange這兩個函數,從代碼層面分析tqdm的功能,那首先是init.py

__all__=['tqdm','tqdm_gui','trange','tgrange','tqdm_pandas',
'tqdm_notebook','tnrange','main','TqdmKeyError','TqdmTypeError',
'__version__']

跟蹤到_tqdm.py,能看到tqdm類的聲明,首先是初始化

def__init__(self,iterable=None,desc=None,total=None,leave=True,
file=sys.stderr,ncols=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,
gui=False,**kwargs):
Parameters

iterable:iterable,optional
Iterabletodecoratewithaprogressbar.
可迭代的進度條。
Leaveblanktomanuallymanagetheupdates.
留空手動管理更新??
desc:str,optional
Prefixfortheprogressbar.
進度條的描述
total:int,optional
Thenumberofexpectediterations.Ifunspecified,
len(iterable)isusedifpossible.Asalastresort,onlybasic
progressstatisticsaredisplayed(noETA,noprogressbar).
IfguiisTrueandthisparameterneedssubsequentupdating,
specifyaninitialarbitrarylargepositiveinteger,
e.g.int(9e9).
預期的迭代數目,默認為None,則盡可能的迭代下去,如果gui設置為True,這里則需要后續的更新,將需要指定為一個初始隨意值較大的正整數,例如int(9e9)
leave:bool,optional
If[default:True],keepsalltracesoftheprogressbar
uponterminationofiteration.
保留進度條存在的痕跡,簡單來說就是會把進度條的最終形態保留下來,默認為True
file:io.TextIOWrapperorio.StringIO,optional
Specifieswheretooutputtheprogressmessages
[default:sys.stderr].Usesfile.write(str)andfile.flush()
methods.
指定消息的輸出
ncols:int,optional
Thewidthoftheentireoutputmessage.Ifspecified,
dynamicallyresizestheprogressbartostaywithinthisbound.
Ifunspecified,attemptstouseenvironmentwidth.The
fallbackisameterwidthof10andnolimitforthecounterand
statistics.If0,willnotprintanymeter(onlystats).
整個輸出消息的寬度。如果指定,動態調整的進度停留在這個邊界。如果未指定,嘗試使用環境的寬度。如果為0,將不打印任何東西(只統計)。
mininterval:float,optional
Minimumprogressupdateinterval,inseconds[default:0.1].
最小進度更新間隔,以秒為單位(默認值:0.1)。
maxinterval:float,optional
Maximumprogressupdateinterval,inseconds[default:10.0].
最大進度更新間隔,以秒為單位(默認值:10)。
miniters:int,optional
Minimumprogressupdateinterval,initerations.
Ifspecified,willsetminintervalto0.
最小進度更新周期
ascii:bool,optional
IfunspecifiedorFalse,useunicode(smoothblocks)tofill
themeter.ThefallbackistouseASCIIcharacters1-9#.
如果不設置,默認為unicode編碼
disable:bool,optional
Whethertodisabletheentireprogressbarwrapper
[default:False].
是否禁用整個進度條包裝(如果為True,進度條不顯示)
unit:str,optional
Stringthatwillbeusedtodefinetheunitofeachiteration
[default:it].
將被用來定義每個單元的字符串???
unit_scale:bool,optional
Ifset,thenumberofiterationswillbereduced/scaled
automaticallyandametricprefixfollowingthe
InternationalSystemofUnitsstandardwillbeadded
(kilo,mega,etc.)[default:False].
如果設置,迭代的次數會自動按照十、百、千來添加前綴,默認為false
dynamic_ncols:bool,optional
Ifset,constantlyaltersncolstotheenvironment(allowing
forwindowresizes)[default:False].
不斷改變ncols環境,允許調整窗口大小
smoothing:float,optional
Exponentialmovingaveragesmoothingfactorforspeedestimates
(ignoredinGUImode).Rangesfrom0(averagespeed)to1
(current/instantaneousspeed)[default:0.3].

bar_format:str,optional
Specifyacustombarstringformatting.Mayimpactperformance.
Ifunspecified,willuse‘{l_bar}{bar}{r_bar}',wherel_baris
‘{desc}{percentage:3.0f}%|'andr_baris
‘|{n_fmt}/{total_fmt}[{elapsed_str}<{remaining_str},{rate_fmt}]'
Possiblevars:bar,n,n_fmt,total,total_fmt,percentage,
rate,rate_fmt,elapsed,remaining,l_bar,r_bar,desc.
自定義欄字符串格式化…默認會使用{l_bar}{bar}{r_bar}的格式,格式同上

initial:int,optional
Theinitialcountervalue.Usefulwhenrestartingaprogress
bar[default:0].
初始計數器值,默認為0
position:int,optional
Specifythelineoffsettoprintthisbar(startingfrom0)
Automaticifunspecified.
Usefultomanagemultiplebarsatonce(eg,fromthreads).
指定偏移,這個功能在多個條中有用
gui:bool,optional
WARNING:internalparameter-donotuse.
Usetqdm_gui(…)instead.Ifset,willattempttouse
matplotlibanimationsforagraphicaloutput[default:False].
內部參數…
Returns
out:decoratediterator.
返回為一個迭代器

其實不用分析更多代碼,多看看幾個例子:(官網的例子)

7zx.py壓縮進度條

#-*-coding:utf-8-*-
"""Usage:
7zx.py[--help|options]<zipfiles>...
Options:
-h,--helpPrintthishelpandexit
-v,--versionPrintversionandexit
-c,--compressedUsecompressed(insteadofuncompressed)filesizes
-s,--silentDonotprintonerowperzipfile
-y,--yesAssumeyestoallqueries(forextraction)
-D=<level>,--debug=<level>
Printvarioustypesofdebugginginformation.Choices:
CRITICAL|FATAL
ERROR
WARN(ING)
[default:INFO]
DEBUG
NOTSET
-d,--debug-tracePrintlotsofdebugginginformation(-DNOTSET)
"""
from__future__importprint_function
fromdocoptimportdocopt
importloggingaslog
importsubprocess
importre
fromtqdmimporttqdm
importpty
importos
importio
__author__="CasperdaCosta-Luis<casper.dcl@physics.org>"
__licence__="MPLv2.0"
__version__="0.2.0"
__license__=__licence__


RE_SCN=re.compile("([0-9]+)\s+([0-9]+)\s+(.*)$",flags=re.M)


defmain():
args=docopt(__doc__,version=__version__)
ifargs.pop('--debug-trace',False):
args['--debug']="NOTSET"
log.basicConfig(level=getattr(log,args['--debug'],log.INFO),
format='%(levelname)s:%(message)s')
log.debug(args)

#Getcompressedsizes
zips={}
forfninargs['<zipfiles>']:
info=subprocess.check_output(["7z","l",fn]).strip()
finfo=RE_SCN.findall(info)

#builtintest:lastlineshouldbetotalsizes
log.debug(finfo)
totals=map(int,finfo[-1][:2])
#log.debug(totals)
forsinrange(2):
assert(sum(map(int,(inf[s]forinfinfinfo[:-1])))==totals[s])
fcomp=dict((n,int(cifargs['--compressed']elseu))
for(u,c,n)infinfo[:-1])
#log.debug(fcomp)
#zips:{'zipname':{'filename':int(size)}}
zips[fn]=fcomp

#Extract
cmd7zx=["7z","x","-bd"]
ifargs['--yes']:
cmd7zx+=["-y"]
log.info("Extractingfrom{:d}file(s)".format(len(zips)))
withtqdm(total=sum(sum(fcomp.values())forfcompinzips.values()),
unit="B",unit_scale=True)astall:
forfn,fcompinzips.items():
md,sd=pty.openpty()
ex=subprocess.Popen(cmd7zx+[fn],
bufsize=1,
stdout=md,#subprocess.PIPE,
stderr=subprocess.STDOUT)
os.close(sd)
withio.open(md,mode="rU",buffering=1)asm:
withtqdm(total=sum(fcomp.values()),disable=len(zips)<2,
leave=False,unit="B",unit_scale=True)ast:
whileTrue:
try:
l_raw=m.readline()
exceptIOError:
break
l=l_raw.strip()
ifl.startswith("Extracting"):
exname=l.lstrip("Extracting").lstrip()
s=fcomp.get(exname,0)#0islikelyfolders
t.update(s)
tall.update(s)
elifl:
ifnotany(l.startswith(i)foriin
("7-Zip",
"p7zipVersion",
"EverythingisOk",
"Folders:",
"Files:",
"Size:",
"Compressed:")):
ifl.startswith("Processingarchive:"):
ifnotargs['--silent']:
t.write(t.format_interval(
t.start_t-tall.start_t)+''+
l.lstrip("Processingarchive:"))
else:
t.write(l)
ex.wait()


main.__doc__=__doc__


if__name__=="__main__":
main()

tqdm_wget.py

"""Anexampleofwrappingmanualtqdmupdatesforurllibreporthook.
#urllib.urlretrievedocumentation
>Ifpresent,thehookfunctionwillbecalledonce
>onestablishmentofthenetworkconnectionandonceaftereachblockread
>thereafter.Thehookwillbepassedthreearguments;acountofblocks
>transferredsofar,ablocksizeinbytes,andthetotalsizeofthefile.
Usage:
tqdm_wget.py[options]
Options:
-h,--help
Printthishelpmessageandexit
-uURL,--urlURL:string,optional
Theurltofetch.
[default:http://www.doc.ic.ac.uk/~cod11/matryoshka.zip]
-oFILE,--outputFILE:string,optional
Thelocalfilepathinwhichtosavetheurl[default:/dev/null].
"""

importurllib
fromtqdmimporttqdm
fromdocoptimportdocopt


defmy_hook(t):
"""
Wrapstqdminstance.Don'tforgettoclose()or__exit__()
thetqdminstanceonceyou'redonewithit(easiestusing`with`syntax).
Example
-------
>>>withtqdm(...)ast:
...reporthook=my_hook(t)
...urllib.urlretrieve(...,reporthook=reporthook)
"""
last_b=[0]

definner(b=1,bsize=1,tsize=None):
"""
b:int,optional
Numberofblocksjusttransferred[default:1].
bsize:int,optional
Sizeofeachblock(intqdmunits)[default:1].
tsize:int,optional
Totalsize(intqdmunits).If[default:None]remainsunchanged.
"""
iftsizeisnotNone:
t.total=tsize
t.update((b-last_b[0])*bsize)
last_b[0]=b
returninner


opts=docopt(__doc__)

eg_link=opts['--url']
eg_file=eg_link.replace('/','').split()[-1]
withtqdm(unit='B',unit_scale=True,leave=True,miniters=1,
desc=eg_file)ast:#alloptionalkwargs
urllib.urlretrieve(eg_link,filename=opts['--output'],
reporthook=my_hook(t),data=None)

examples.py

"""
#Simpletqdmexamplesandprofiling
#Benchmark
foriin_range(int(1e8)):
pass
#Basicdemo
importtqdm
foriintqdm.trange(int(1e8)):
pass
#Somedecorations
importtqdm
foriintqdm.trange(int(1e8),miniters=int(1e6),ascii=True,
desc="cool",dynamic_ncols=True):
pass
#Nestedbars
fromtqdmimporttrange
foriintrange(10):
forjintrange(int(1e7),leave=False,unit_scale=True):
pass
#ExperimentalGUIdemo
importtqdm
foriintqdm.tgrange(int(1e8)):
pass
#Comparisontohttps://code.google.com/p/python-progressbar/
try:
fromprogressbar.progressbarimportProgressBar
exceptImportError:
pass
else:
foriinProgressBar()(_range(int(1e8))):
pass
#Dynamicminitersbenchmark
fromtqdmimporttrange
foriintrange(int(1e8),miniters=None,mininterval=0.1,smoothing=0):
pass
#Fixedminitersbenchmark
fromtqdmimporttrange
foriintrange(int(1e8),miniters=4500000,mininterval=0.1,smoothing=0):
pass
"""

fromtimeimportsleep
fromtimeitimporttimeit
importre

#Simpledemo
fromtqdmimporttrange
foriintrange(16,leave=True):
sleep(0.1)

#Profiling/overheadtests
stmts=filter(None,re.split(r'\n\s*#.*?\n',__doc__))
forsinstmts:
print(s.replace('importtqdm\n',''))
print(timeit(stmt='try:\n\t_range=xrange'
'\nexcept:\n\t_range=range\n'+s,number=1),
'seconds')

pandas_progress_apply.py

importpandasaspd
importnumpyasnp
fromtqdmimporttqdm

df=pd.DataFrame(np.random.randint(0,100,(100000,6)))

#Register`pandas.progress_apply`and`pandas.Series.map_apply`with`tqdm`
#(canuse`tqdm_gui`,`tqdm_notebook`,optionalkwargs,etc.)
tqdm.pandas(desc="mybar!")

#Nowyoucanuse`progress_apply`insteadof`apply`
#and`progress_map`insteadof`map`
df.progress_apply(lambdax:x**2)
#canalsogroupby:
#df.groupby(0).progress_apply(lambdax:x**2)


#--Sourcecodefor`tqdm_pandas`(reallysimple!)
#deftqdm_pandas(t):
#frompandas.core.frameimportDataFrame
#definner(df,func,*args,**kwargs):
#t.total=groups.size//len(groups)
#defwrapper(*args,**kwargs):
#t.update(1)
#returnfunc(*args,**kwargs)
#result=df.apply(wrapper,*args,**kwargs)
#t.close()
#returnresult
#DataFrame.progress_apply=inner

引用tqdm并非強制作為依賴:

include_no_requirements.py

#Howtoimporttqdmwithoutenforcingitasadependency
try:
fromtqdmimporttqdm
exceptImportError:
deftqdm(*args,**kwargs):
ifargs:
returnargs[0]
returnkwargs.get('iterable',None)

總結

以上是生活随笔為你收集整理的如何在python中使用Tqdm模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。