使用回车符在 Python 中创建进度条
![]()
我叫斋藤,是一名基础设施工程师。
今天,我想向大家介绍一下回车符(CR),并编写几个脚本来演示它们。
然后,我们将使用 Python 中的回车符创建一个进度条。
什么是回车符(CR)?
回车符(CR)是一个特殊字符,用“r”表示。很多人可能都熟悉换行符“n”。
什么是回车符?
最初,在使用打字机时,手动将打印字符的字车部分放回原位的动作称为回车(CR)。
移动到新行的操作称为换行(LF)。
当今使用的所有操作系统都有与电子打字机兼容的历史,而这个“r”都以某种形式出现。
例如,在 Windows 操作系统中,换行符是 rn,可以解释为“回到原始位置 (CR) 然后移动到新的一行 (LF)”。
Unix、Mac、Linux、BSD 等系统根据 POSIX 标准分别使用 r 和 n。
使用换行符 n 时,光标会定位到新行的开头。
换句话说,n 既是回车符又是换行符,而 r 是回车符,它将光标返回到其原始位置。
尝试使用 r
我已经给出了不同操作系统的例子,但即使在编程语言中,r 和 n 也经常分开使用。
我们来实际尝试一下在 Python 中使用 R。
$ python -c "import sys; sys.stdout.write('beyondrBn')" Beyond
- “-c”选项用于在Python中编写单行代码。-
sys.stdout.write将输出发送到标准输出,并将字符串写入缓冲区(缓存)。
那么,在“beyondrBn”中,显示结果是如何确定的呢?
1. 首先,显示字符串“beyond”。此时,光标位于“d”之后。2
. 因为存在“r”,光标移动到“b”的开头。3
. 现在,“B”覆盖在“b”之上。4
. 因为存在“n”,所以另起一行。
这样,r 就可以在同一行上多次写入字符。
创建进度条
利用上述特性,您可以创建一个在命令行运行的进度条。以下是用 Python 编写的进度条示例。
import sys, time def prog_bar(length=100): for i in range(length): sys.stdout.write('#'*i + 'r') sys.stdout.flush() time.sleep(0.01) for i in range(4): prog_bar()
`sys.stdout.write` 会将输出缓存起来,然后再显示到终端。
(实际上,`print()` 函数内部也使用了 `sys.stdout`。)
`sys.stdout.flush` 用于清除缓存的信息。
尝试编写动画
我们还可以编写一个有趣的动画,让进度条旋转。(以下代码已验证可在 Python 3 中运行。)
import time space = '.' bar = '-|/' length = 100 printset = (('{0}{1}r'.format (space*(i-length//2) if i > length//2 else '', bar[i%4]), time.sleep(0.05)) for i in range(length)) for i in printset: print(i[0], end='') print(' '*length, end='r')
它还可以用于许多其他用途。
我甚至在密码生成脚本中添加了类似老虎机的动画效果。
欢迎大家在此基础上进行扩展,尽情发挥创意!
如果您想咨询开发专业人士
在 Beyond,我们将我们在系统开发方面的丰富经验、技术和专业知识与开源软件技术和云技术(如 AWS)相结合,以可靠的质量和卓越的性价比提供网络系统的合同开发服务。
我们还负责服务器端/后端开发和专有 API 协作开发,充分利用我们的技术和专业知识,为大规模、高负载的游戏、应用程序和数字内容构建和运营 Web 系统/应用程序基础设施。
如果您在开发项目方面遇到任何问题,请访问以下网站。
0
