python?print無法打印\r的問題及解決
python print無法打印\r問題
最近在學(xué)習(xí)python的爬蟲,今天爬取內(nèi)容的時候發(fā)現(xiàn)了一個bug,讓我迷惑了好一會,后面終于發(fā)現(xiàn)了問題所在。
在python中,當(dāng)遇到'\r'回車符時,print的光標(biāo)要重新置為這一行的開頭而且不會換行,然后就會導(dǎo)致前面的內(nèi)容被覆蓋掉,導(dǎo)致打印的內(nèi)容出現(xiàn)缺失。
解決辦法
1.可以用字符串的替換把'\r'替換為空串""或者空格" "這樣就可以正常打印了。
替換方法:
import re #三個參數(shù)分別是要替換的正則表達(dá)式,要替換成的字符串,要替換的目標(biāo),下面的意思就是將temp這個字符串的回車符'\r'全部替換為""空串 print re.sub(r'\r',"" , temp)
2.可以在后面添加'\n'換行符,這樣就會換行打印了,不會覆蓋掉之前的內(nèi)容。
import re #三個參數(shù)分別是要替換的正則表達(dá)式,要替換成的字符串,要替換的目標(biāo),下面的意思就是將temp這個字符串的回車符'\r'全部替換為'\r\n'回車換行符 print re.sub(r'\r','\r\n' , temp)
注意:
這里的回車符只影響打印,要是你直接寫入文件是不會出現(xiàn)問題的,另外要注意因?yàn)閰?shù)要用到和返回值都是字符串,可以先在之前把其他的處理完了再替換打印,不然可能格式變化會影響之后的處理。
python中\(zhòng)r的意義及用法
\r的意義
\r
表示將光標(biāo)的位置回退到本行的開頭位置\b
表示將光標(biāo)的位置回退一位
在python里print會默認(rèn)進(jìn)行換行,可以通過修改參數(shù)讓其不換行
(1) python2中可以在print語句的末尾加上逗號,代碼如下:
print "hello", print "world"
執(zhí)行結(jié)果
hello world
請按任意鍵繼續(xù). . .
(2)在python3里print是一個獨(dú)立函數(shù),可以通過修改它的默認(rèn)值來讓其不換行
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參數(shù)改為其他的字符可以讓print不換行,來看代碼
print("Dream", "it", "possible", sep="-",end="/") print("Big big world")
運(yùn)行結(jié)果如下:
Dream-it-possible/Big big world
Process finished with exit code 0
\r的應(yīng)用
利用\r可以實(shí)現(xiàn)很多有趣的小功能
在命令行實(shí)現(xiàn)倒計(jì)時功能
# 顯示倒計(jì)時 import time for i in range(10): print("\r離程序退出還剩%s秒" % (9-i), end="") time.sleep(1)
運(yùn)行結(jié)果如圖
命令行實(shí)現(xiàn)轉(zhuǎn)圈功能
import time lst = ["\\", "|", "/", "———"] for i in range(20): j = i % 4 print("\r" + lst[j], end="") time.sleep(0.2)
實(shí)現(xiàn)進(jìn)度條功能
# 進(jìn)度條功能 import time for i in range(10): print("\r" + "■"*i, sep="", end="") time.sleep(0.2) print("\n下載完成")
運(yùn)行效果如下
實(shí)現(xiàn)刪除效果功能
import time s = "枝上柳綿吹又少,天涯何處無芳草" l = len(s) for i in range(l): print("\r" + s[:l-1-i] + "|", end="") time.sleep(0.15)
運(yùn)行效果如圖
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
django搭建項(xiàng)目配置環(huán)境和創(chuàng)建表過程詳解
這篇文章主要介紹了django搭建項(xiàng)目配置環(huán)境和創(chuàng)建表過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07利用keras加載訓(xùn)練好的.H5文件,并實(shí)現(xiàn)預(yù)測圖片
今天小編就為大家分享一篇利用keras加載訓(xùn)練好的.H5文件,并實(shí)現(xiàn)預(yù)測圖片,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Ubuntu16.04 安裝多個python版本的問題及解決方法
Ubuntu16.04自帶python2.7與python3.5,Ubuntu 官方 apt 庫中還未收錄 python 3.8,因此添加 deadsnakes PPA 源安裝python3.8,否則會出現(xiàn)報(bào)錯,接下來通過本文給大家介紹Ubuntu16.04 安裝python的問題,一起看看吧2021-09-09為Python的Tornado框架配置使用Jinja2模板引擎的方法
Jinja2是人氣Web框架Flask中的內(nèi)置模板引擎,而且與Django的模板引擎比較類似,這里我們就來看一下為Python的Tornado框架配置使用Jinja2模板引擎的方法2016-06-06