python控制台等待输出倒计时、转圈、进度条

python控制台等待输出倒计时、转圈、进度条

1. 控制台输出倒计时

#!/usr/bin/python3
# -*- coding:utf-8 -*-

"""
python控制台倒计时
"""
__author__ = "river.yang"
__date__ = "2022/11/26 20:20"
__version__ = "1.0.0"

from time import sleep
from datetime import datetime, timedelta
import time


def count_down(weeks=0, days=0, hours=0, minutes=0, seconds=0):
    remain_time = timedelta(weeks=weeks, days=days, hours=hours, minutes=minutes, seconds=seconds)
    while remain_time.total_seconds() > 0:
        time.sleep(1)
        remain_time -= timedelta(seconds=1)
        print("\r 倒计时:{}".format(remain_time), end="", flush=True)


def print_test():
    for i in range(20):
        print("#", end="", flush=True)
        sleep(0.1)


if __name__ == '__main__':
    print("当前版本: ", __version__)
    count_down(seconds=11)

代码解析:

这里主要用到了print函数的几个参数,解释如下:

参数1:end,设置字符串末尾的字符,默认是"/n"换行符,这里赋值"",也就是什么也不加,就不会自动换行

参数2:flush,设置是否清除显示,默认是False,赋值True避免出现重影等显示问题

另外,这里在输出倒计时前,加了"/r"字符,意思是将光标定位到行首进行输出显示
输出效果如下:
在这里插入图片描述

2. 控制台输出转圈

def circle_print(total_time=0):
    list_circle = ["\\", "|", "/", "—"]
    for i in range(total_time * 4):
        time.sleep(0.25)
        print("\r{}".format(list_circle[i % 4]), end="", flush=True)

输出效果如下:

在这里插入图片描述

3. 控制台输出进度条

(1)简易进度条,没有进度指示,只有简单符号

def print_test():
    for i in range(20):
        print("#", end="", flush=True)
        sleep(0.1)

效果如下:

在这里插入图片描述

(2)复杂进度条

这里需要依赖第三方库,使用指令安装:pip3 install tqdm

# -*- coding=utf-8 -*-

import time
from tqdm import tqdm

for i in tqdm(range(100)):
    time.sleep(0.1)

** 输出效果如下:**

在这里插入图片描述

(3)复杂进度条

上面的进度条要依赖第三方库,不方便移植程序,用着着实不爽,所以干脆自己实现一个方便移植

#!/usr/bin/python3
# -*- coding:utf-8 -*-

"""
python控制台进度打印
"""
__author__ = "river.yang"
__date__ = "2022/11/26 20:20"
__version__ = "1.0.0"

import time

def del_progress():
    time.sleep(0.2)

def progress_print(total_cnt=20, index_cha='+', pro_total_cnt=50, fun=None):
	"""
    :param total_cnt: 总循环次数
    :param index_cha: 进度指示符号,可以任意替换喜欢的符号
    :param pro_total_cnt: 100%进度显示的总符号个数
    :param fun: 每次进度循环处理的回调函数
    """
    start_time = time.time()
    for i in range(total_cnt):
        current_cnt = int((i + 1) / total_cnt * pro_total_cnt)
        str_progress = index_cha * current_cnt + ' ' * (pro_total_cnt - current_cnt)
        spend_time = time.time() - start_time
        print("\033[31m\r{:.1%} [{}] total time: {:.2f}s\033[0m".format((i + 1) / total_cnt, str_progress, spend_time),
              end="", flush=True)
        if fun is not None:
            fun()

if __name__ == '__main__':
    print("当前版本: ", __version__)
    progress_print(fun=del_progress)

输出效果如下:

在这里插入图片描述

代码解析

这里用到了几个知识点

  • print的几个参数:end,flush上面讲过了不再赘述
  • print显示颜色,语法格式为
\033[前景色m******\033[0m
# 这里****为打印显示的内容
\033[显示方式; 前景色; 背景色m******\033[0m

其中显示方式和颜色如下表

显示方式显示效果
0默认值
1高亮(加粗)
4下划线
5闪烁
7反显
8不可见
前景色背景色颜色说明
3040黑色
3141红色
3242绿色
3343黄色
3444蓝色
3545紫红色
3646青蓝色
3747白色
  • format格式化字符串百分比显示和保留小数位数,详细用法见下表
数字格式输出描述
3.1415926{:.2f}3.14保留小数点后两位
3.1415926{:+.2f}+3.14带符号保留小数点后两位
-1{:-.2f}-1.00带符号保留小数点后两位
2.71828{:.0f}3不带小数
5{:0>2d}05数字补零 (填充左边, 宽度为2)
5{:x<4d}5xxx数字补x (填充右边, 宽度为4)
10{:x<4d}10xx数字补x (填充右边, 宽度为4)
1000000{:,}1,000,000以逗号分隔的数字格式
0.25{:.2%}25.00%百分比格式
1000000000{:.2e}1.00e+09指数记法
13{:>10d}13右对齐 (默认, 宽度为10)
13{:<10d}13左对齐 (宽度为10)
13{:^10d}13中间对齐 (宽度为10)
11‘{:b}’.format(11)
‘{:d}’.format(11)
‘{:\o}’.format(11)
‘{:x}’.format(11)
‘{:#x}’.format(11)
‘{:#X}’.format(11)
1011
11
13
b
0xb
0XB
进制

^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格
b、d、o、x 分别是二进制、十进制、八进制、十六进制。
此外我们可以使用大括号 {} 来转义大括号

  • 把处理函数time.sleep(0.2)单独作为参数传入,目的是为了方便扩展,以后同时做处理和进度显示,就可以把处理部分单独写成函数传入,逻辑更加清晰。

·
·
·

欢迎各位老铁一键三连,本号后续会不断更新树莓派、人工智能、STM32、ROS小车相关文章和知识。

大家对感兴趣的知识点可以在文章下面留言,我可以优先帮大家讲解哦

欢迎大家光临我的淘宝小店【玩转智能机器人】,会定期推出教程中使用的物美价优的硬件,你的光临就是对我的支持

原创不易,转载请说明出处。

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python控制台进度条可以通过在循环中使用特定字符来显示进度。以下是两种简单的源代码来显示控制台进度条: 代码1: ```python import time for i in range(1, 101): print('\r' + '▋' * i + '当前进度:{}%'.format(i), end='') time.sleep(0.3) ``` 这段代码使用`\r`来回车到行首,然后使用`▋`字符来表示进度条的进度,最后使用`format()`函数将当前进度百分比插入到字符串中。 代码2: ```python import sys import time for i in range(1, 101): sys.stdout.write('\r' + '▋' * i + '当前进度:{}%'.format(i)) sys.stdout.flush() time.sleep(0.3) ``` 这段代码使用`sys.stdout.write()`来在同一行输出进度条,然后使用`sys.stdout.flush()`来立即刷新输出,以便显示进度条的更新。 您可以根据需要选择其中一种代码来实现控制台进度条效果。希望对您有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python实现控制台输出文本进度条](https://blog.csdn.net/m0_46653437/article/details/109152688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【Python实用工具】用Python控制台输出进度条](https://blog.csdn.net/qq_41823684/article/details/118578754)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玩转智能机器人

但行好事,莫问前程,日拱一卒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值