tqdm
最近一款新的进度条 tqdm
库比较热门,声称比老版的 python-progressbar
库的单次响应时间提高了 10 倍以上。
Overhead is low -- about 60ns per iteration (80ns with gui=True). By comparison, the well established ProgressBar has an 800ns/iter overhead.
初读其源码,组织结构明显继承 python-progressbar
,只是主代码行数从 357 提升到了 614。10 倍性能提升的奥妙在哪里呢?
在解答这个问题之前,我想先用这篇文章介绍下进度条的原理,然后,根据原理用几行代码实现一个简单的进度条。
progress bar 的原理
其实进度条的原理十分的简单,无非就是在 shell
中不断重写当前输出。
这时就不得不提到文本系统中的控制符。我们挑跟这次有关的看一下。
- \r = CR (Carriage Return) // moves the cursor to the beginning of the line without advancing to the next line(该控制符告诉输出端,将光标移到当前行的首位而不换行)
- \n = LF (Line Feed) // moves the cursor down to the next line without returning to the beginning of the line - *In a nix environment \n moves to the beginning of the line.(传统意义上的换行符,将光标移到下一行,但_并不移到首位_ )
- \r\n = CR + LF // a combi of \r and \n (换行并移动光标到行首)
这时,想要实现一个进度条,就十分简单,看下方代码。
Bash 实现
#/usr/bin/bash
for i in {1..100};
do
echo -ne "$i% \r"
sleep 0.01
done
echo -ne "\n"
但是,echo -n
存在明显的兼容性问题。
-n Do not print the trailing newline character. This may also be achieved by appending
\c
to the end of the string, as is done by iBCS2 compatible systems. Note that this option as well as the effect of\c
are implementation-defined in IEEE Std 1003.1-2001 (POSIX.1
) as amended by Cor. 1-2002. Applications aiming for maximum portability are strongly encouraged to useprintf(1)
to suppress the newline character.Some shells may provide a builtin echo command which is similar or identical to this utility. Most notably, the builtin echo in sh(1) does not accept the -n option. Consult the builtin(1) manual page.
推荐使用 printf
。
#/usr/bin/bash
for i in {1..100};
do
printf "%s%% \r" $i
sleep 0.01
done
printf "\n"
Python 实现
Python 主要使用系统库里的标准输出,sys.stdout
提供了便利的方法用于向 shell
打印输出。具体的方法介绍这里不赘述。
import sys
import time
for i in range(100):
sys.stdout.write(' \r')
sys.stdout.flush()
sys.stdout.write('{}%\r'.format(i))
sys.stdout.flush()
time.sleep(0.01)
References
- tqdm repo
- progress bar repo
- NewLine Wikipedia
- Control Characters
- What's the difference between \r and \n
相关推荐
使用tqdm实现进度条显示资源为python实现任务进度条的示例代码,使用tqdm实现进度条显示资源为python实现任务进度条的示例代码,使用tqdm实现进度条显示资源为python实现任务进度条的示例代码,使用tqdm实现进度条...
"自动高速下载python第三方库.zip"这个压缩包文件显然是为Python开发者设计的,旨在简化和加速Python第三方库的安装过程。下面,我们将详细探讨与Python第三方库、pip以及如何高效安装相关的知识点。 1. **Python第...
这是近期讲解的关于Python中的进度条库---tqdm相关资源,本资源包含完整的几个tqdm小案例代码,带有注释解析,欢迎需要的朋友下载练习。在主页blog“【工具、技巧、解决办法】PPT不暂停直接跳到下一张怎么办 | 趣味...
第三种方法是使用Python第三方库`tqdm`。`tqdm`是一个快速、可扩展的Python进度条库,它可以在长循环中添加一个进度提示信息,用户只需要封装任意的迭代器`tqdm(iterator)`。代码示例中演示了如何使用`tqdm`来装饰一...
Python是一种强大的、面向对象的编程语言,其丰富的第三方库是其独特魅力的一部分。这些库极大地扩展了Python的功能,使得开发者可以高效地实现各种复杂任务,无论是数据处理、网络编程、科学计算还是图形用户界面...
Python作为一种高级编程语言,在科学计算、数据分析、机器学习、可视化以及网络编程等领域拥有大量第三方库的支持。本文将详细解读这些流行的Python第三方库,以及如何安装它们,并介绍机器学习的基本概念。 首先,...
【课程列表】 第1章-程序设计基本方法 共45页.pptx 第2章-Python语言基本语法元素 共46页.ppt 第3章-程序的控制结构 共53页.ppt 第4章-组合数据类型 共57页.pptx ...第8章-Python第三方库概览 共60页.ppt
### 第10章 Python第三方库概览 #### Python第三方库概览 在计算机编程领域,尤其是使用Python进行软件开发时,经常会用到第三方库来扩展Python的功能性,提高开发效率。这一章节主要介绍如何获取及安装这些第三方...
Python第三方库批量安装,傻瓜式操作。方便吧。当然,有时候,我们的网络并不是那么顺畅,pip是在线安装的,可不可以离线呢?当然可以啦,pip install 的第一步,就是在 pypi 上寻找包,然后下载到本地。如果网络...
Python学习第三方库案例总结
python第三方库:pymysql
pip使用清华镜像源安装 包含离线库下载安装地址和可用国内源快速安装方法 python安装第三方库,用cmd安装自带是国外的源,速度比较慢,大家应该都感受过。
Python的`multiprocessing`模块提供了创建多进程的功能,而`tqdm`库则可以方便地为程序添加进度条,提供友好的用户界面。本文将详细介绍如何结合`multiprocessing`和`tqdm`来实现多进程并显示进度条。 1. **多进程...
`tqdm`是Python中一个广受欢迎的库,用于在命令行界面创建动态进度条。然而,有时候开发者可能需要更具有特色或更多功能的进度条库。这就是`Python-bunny`的出现,它被称为"一个类似于tqdm的进度条,但拥有更多的...
Python进度条之 tqdmtqdm的安装与导入tqdm的一些简单的例子自拟定显示信息高级应用多进程进度条注意: tqdm是一个使用简单,且美观的进度条的包,下面看一下效果。 使用这个库,我分首先要导入库函数 tqdm的安装与...
Python3.8版本第三方库pycairo经编译后的安装包,下载请注意Python对应64位版本3.8
tqdm 是一个易用性强、扩展性高的 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息,我们只需要封装任意的迭代器 tqdm(iterator) 即可。 二、安装 安装过程如下: 三、自动控制进度更新 1.传入可...
Python第三方库matplotlib(2D绘图库)入门与进阶 Python第三方库wordcloud(词云)快速入门与进阶 Python第三方库jieba(中文分词)入门与进阶(官方文档)) Python第三方库SnowNLP(Simplified Chinese Text ...
Python 和第三方库交叉编译过程详解 Python 作为一门高级编程语言,广泛应用于数据科学、人工智能、Web 开发等领域。然而,在交叉编译过程中,Python 需要与第三方库进行集成,以满足不同的应用场景。本文将详细...