python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python print无法打印\r问题

python print无法打印\r的问题及解决

作者:痛快最重要

这篇文章主要介绍了python print无法打印\r的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python print无法打印\r问题

最近在学习python的爬虫,今天爬取内容的时候发现了一个bug,让我迷惑了好一会,后面终于发现了问题所在。

在python中,当遇到'\r'回车符时,print的光标要重新置为这一行的开头而且不会换行,然后就会导致前面的内容被覆盖掉,导致打印的内容出现缺失。

解决办法

1.可以用字符串的替换把'\r'替换为空串""或者空格" "这样就可以正常打印了。

替换方法:

import re
#三个参数分别是要替换的正则表达式,要替换成的字符串,要替换的目标,下面的意思就是将temp这个字符串的回车符'\r'全部替换为""空串
print re.sub(r'\r',"" , temp)

2.可以在后面添加'\n'换行符,这样就会换行打印了,不会覆盖掉之前的内容。

import re
#三个参数分别是要替换的正则表达式,要替换成的字符串,要替换的目标,下面的意思就是将temp这个字符串的回车符'\r'全部替换为'\r\n'回车换行符
print re.sub(r'\r','\r\n' , temp)

注意:

这里的回车符只影响打印,要是你直接写入文件是不会出现问题的,另外要注意因为参数要用到和返回值都是字符串,可以先在之前把其他的处理完了再替换打印,不然可能格式变化会影响之后的处理。

python中\r的意义及用法

\r的意义

在python里print会默认进行换行,可以通过修改参数让其不换行

(1) python2中可以在print语句的末尾加上逗号,代码如下:

print "hello",
print "world"

执行结果

hello world

请按任意键继续. . .

(2)在python3里print是一个独立函数,可以通过修改它的默认值来让其不换行

def print(self, *args, sep=' ', end='\n', file=None): # known special case of 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参数改为其他的字符可以让print不换行,来看代码

print("Dream", "it", "possible", sep="-",end="/")
print("Big big world")

运行结果如下:

Dream-it-possible/Big big world

Process finished with exit code 0

\r的应用

利用\r可以实现很多有趣的小功能

在命令行实现倒计时功能

# 显示倒计时
import time
for i in range(10):
    print("\r离程序退出还剩%s秒" % (9-i), end="")
    time.sleep(1)

运行结果如图

命令行实现转圈功能

import time
lst = ["\\", "|", "/", "———"]
for i in range(20):
    j = i % 4
    print("\r" + lst[j], end="")
    time.sleep(0.2)

实现进度条功能

# 进度条功能
import time
for i in range(10):
    print("\r" + "■"*i, sep="", end="")
    time.sleep(0.2)
print("\n下载完成")

运行效果如下

实现删除效果功能

import time
s = "枝上柳绵吹又少,天涯何处无芳草"
l = len(s)
for i in range(l):
    print("\r" + s[:l-1-i] + "|", end="")
    time.sleep(0.15)

运行效果如图

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文