Python中的sys.stdout.write实现打印刷新功能

作者:roohom 时间:2022-01-17 14:51:50 

前言:

今天学习python的常用模块的时候,了解到了time模块和datetime模块,于是想在编译环境中实时打印出时间,不会换行,且打印的时候自动删除前一步打印出的时间(本质原理不是这样),而不是像print那样打印之后自动换行再重新打印。

想要直接看到效果及方法,请直接跳到后文 解决办法。

我们先来看看Print方法打印的效果:

代码:


from datetime import datetime as dt
import sys
import time

for i in range(5):
 print(dt.now())
 time.sleep(1)

输出结果:


C:\Users\Administrator\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/untitled/test.py
2018-08-06 16:46:46.636256
2018-08-06 16:46:47.636313
2018-08-06 16:46:48.636370
2018-08-06 16:46:49.636427
2018-08-06 16:46:50.637484

Process finished with exit code 0

可以看到,用print打印出来自动换行且不会清除上一个结果

help一下看看:

help(print)

输出:


print(...)
 print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

Prints the values to a stream, or to sys.stdout by default.
 Optional keyword arguments:
 file: a file-like object (stream); defaults to the current sys.stdout.
 sep:  string inserted between values, default a space.
 end:  string appended after the last value, default a newline.
 flush: whether to forcibly flush the stream.

可以看到end=“\n”表示了print自带换行

如果我想要在一行中打印一串信息,并且在下一次执行的时候删除这一行再重新打印(效果类似如此),该如何做呢?尝试清屏可不可以?

清屏试一试,查阅别的博客的方法有如下代码:


import os

os.system('cls')

但这是在命令行里使用的,用在编译器里不行。

解决办法

这时候就要用到sys.stdout.write了

使用如下方法:


from datetime import datetime as dt
import sys
import time

while True:
 a = dt.now()
 sys.stdout.write("\r{0}".format(a))
 sys.stdout.flush()
 time.sleep(1)

以及:


from datetime import datetime as dt
import sys
import time

for i in range(20):
 a = dt.now()
 sys.stdout.write("\r{0}".format(a))
 sys.stdout.flush()
 sys.stdout.write('\033[4A')
 time.sleep(1)

都可以实现实时打印。

其关键就在于使用'\r'这个转义字符(回到行首), sys.stdout.write首先打印这一行后不带任何结尾(前文已经说过print打印结尾带end="\n",表示自带换行,换行了就不能在对已经打印的这一行进行更改编辑),使用了转移字符"\r"使得光标回到行首,再把缓冲区显示出来,就得到了我们所需要的效果。

效果输出:


C:\Users\Administrator\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/untitled/test.py
2018-08-06 18:26:21.264878

Run只会显示这一个,并且一秒钟更新一次。

这样就可以利用它来打印进度条。

进度条的特点:

- 有标刻度显示所占总进度比例

- 有百分比显示所占比例

代码示例:


import time,sys

for i in range(100):
 percent = i / 100
 sys.stdout.write("\r{0}{1}".format("|"*i , '%.2f%%' % (percent * 100)))
 sys.stdout.flush()
 time.sleep(1)

输出效果:

|||||||||||||||||||||||||||||||||33.00%

拓展:Python小知识-sys.stdout.write和print进度条打印方式

打印进度条的方法用两种:

一、sys.stdout.write方式

这个方法中必须使用这句话每次来清理缓存。

sys.stdout.flush()


import sys
import time

i = 0
for i in range(20):
 time.sleep(1)
 sys.stdout.write("\r# Process: %0.1f %%" % (float(i + 1) / float(20) * 100))
 sys.stdout.flush()

二、print方式

其中用print('',end='')来实现sys.stdout.write()


import time
i = 0
for i in range(20):
 time.sleep(1)
 print("\r# Process: %0.1f %%" % (float(i + 1) / float(20) * 100),end="")

结果如图1所示:

Python中的sys.stdout.write实现打印刷新功能

图1

三、\r等转义字符操作

转义字符描述
\反斜杠符号
\r回车
\t横向制表符
\n换行
\'单引号
\”双引号
\oyy八进制数yy代表的字符,例如:\o12代表换行
\xyy十进制数yy代表的字符,例如:\x0a代表换行
\f换页
\b退格(Backspace)

来源:https://blog.csdn.net/qq_39161804/article/details/81456913

标签:Python,sys.stdout.write,打印刷新
0
投稿

猜你喜欢

  • python实现k均值算法示例(k均值聚类算法)

    2021-04-24 20:27:39
  • 来看看如何防止采集

    2007-08-19 20:11:00
  • Python 带星号(* 或 **)的函数参数详解

    2023-04-25 22:36:40
  • python 通过 socket 发送文件的实例代码

    2022-10-07 17:32:48
  • PyTorch简单手写数字识别的实现过程

    2021-07-12 17:17:52
  • JSON.stringify转换JSON时日期时间不准确的解决方法

    2014-07-20 13:25:07
  • python排序算法之归并排序

    2021-03-24 06:05:39
  • PHP设计模式之模板方法模式Template Method Pattern详解

    2023-05-25 00:24:26
  • anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)

    2021-01-13 03:03:38
  • javascript计时器事件使用详解

    2024-05-08 09:38:58
  • matlab画三维图像的示例代码(附demo)

    2023-10-03 11:39:44
  • python3利用Socket实现通信的方法示例

    2022-04-10 03:09:04
  • 利用ASP远程注册DLL的方法

    2008-03-05 13:00:00
  • opencv与numpy的图像基本操作

    2022-06-20 12:20:10
  • 谈一谈数组拼接tf.concat()和np.concatenate()的区别

    2023-01-19 22:15:36
  • Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)

    2024-01-24 06:36:03
  • python实现opencv+scoket网络实时图传

    2023-07-03 16:09:17
  • 透明数据加密(TDE)库的备份和还原

    2012-07-21 14:44:08
  • python用pyecharts画矩形树图实例

    2022-12-20 21:42:04
  • SQL 存储过程基础语法之一

    2024-01-26 19:58:05
  • asp之家 网络编程 m.aspxhome.com