背景
经常使用 Jupyter Notebook 的同学,免不了要安装 新 的 python 模块。这个时候往往就会陷入两难的境地
- 如果直接使用 Jupyter Notebook 安装,看不到进度
-
如果使用命令行安装,麻烦,还得切换到命令行。
有没有一种方式,即能通过 Jupyter Notebook 安装 python 模块,并且还能看到进度条。这个时候发现了 python 超好用的 tqdm 包
tqdm 介绍
tqdm 作用
tqdm` 是一个 Python 的进度条库,可以在 Python 的循环中添加一个进度条,以便在终端中实时显示进度。它可以用于任何可迭代对象,如列表、元组、字典、文件等。
tqdm 安装
pip install tqdm
tqdm 使用
可以应用多个方面,主要是下面三个:
基于 iterable
from tqdm import tqdm
from time import sleep
for char in tqdm(range(100)):
sleep(0.25)
等同于
from tqdm import trange
from time import sleep
for i in trange(100):
sleep(0.25)
可以手动添加一些描述,比如:
from tqdm import trange
from time import sleep
pbar=trange(100)
for i in pbar:
sleep(0.25)
pbar.set_description("Processing %s" % i)
手动控制
from tqdm import tqdm
with tqdm(total=100) as pbar:
for i in range(10):
sleep(0.1)
pbar.update(10)
命令行
find . -name '*.py' -type f -exec cat \{} \; |
tqdm --unit loc --unit_scale --total 857366 >> /dev/null
这个命令用于计算当前目录及其子目录中所有 Python 文件的代码行数。以下是命令的详细解释:
-
find . -name '*.py' -type f
:这个命令在当前目录及其子目录中查找所有扩展名为.py
的文件。 -
-exec cat \{} \;
:这个命令对find
命令找到的每个文件执行cat
命令。{}
是文件名的占位符,\;
表示命令的结束。 -
|
:这是一个管道符号,将find
命令的输出重定向到tqdm
命令。 -
tqdm --unit loc --unit_scale --total 857366
:这个命令使用tqdm
库在cat
命令执行时显示进度条。--unit loc
选项将计量单位设置为“loc”(代码行数),--unit_scale
将输出缩放到更易读的格式。--total 857366
选项设置代码行数的总数为 857,366,用于计算进度条的进度。 -
>> /dev/null
:这个命令将tqdm
命令的输出重定向到/dev/null
,这会丢弃输出。这样做是为了防止进度条在终端上产生干扰。
tqdm 原理
tqdm 通过记录循环的总次数和当前已完成的次数来判断进度。具体来说,它会在循环开始时获取循环的总次数,然后在每次循环中更新已完成的次数,从而计算出当前的进度。
tqdm 支持多种方式来获取循环的总次数,包括:
- 通过传入一个可迭代对象来获取总次数,例如列表、元组、集合等。
- 通过传入一个整数来指定总次数,例如 range 函数。
- 通过传入一个生成器函数来动态生成循环次数。
在每次循环中,tqdm 会更新已完成的次数,并计算出当前的进度。它会根据已完成的次数和总次数来计算进度百分比,并根据进度百分比来更新进度条的显示。同时,tqdm 还会根据已完成的时间和已完成的次数来估算剩余时间,并在进度条中显示出来。
总之,tqdm 通过记录已完成的次数和总次数来判断进度,并根据进度百分比和剩余时间来更新进度条的显示。
网友评论