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的意义
\r
表示将光标的位置回退到本行的开头位置\b
表示将光标的位置回退一位
在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)
运行效果如图
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。