python?print無法打印\r的問題及解決
python print無法打印\r問題
最近在學(xué)習(xí)python的爬蟲,今天爬取內(nèi)容的時(shí)候發(fā)現(xiàn)了一個(gè)bug,讓我迷惑了好一會(huì),后面終于發(fā)現(xiàn)了問題所在。
在python中,當(dāng)遇到'\r'回車符時(shí),print的光標(biāo)要重新置為這一行的開頭而且不會(huì)換行,然后就會(huì)導(dǎo)致前面的內(nèi)容被覆蓋掉,導(dǎo)致打印的內(nèi)容出現(xiàn)缺失。
解決辦法
1.可以用字符串的替換把'\r'替換為空串""或者空格" "這樣就可以正常打印了。
替換方法:
import re #三個(gè)參數(shù)分別是要替換的正則表達(dá)式,要替換成的字符串,要替換的目標(biāo),下面的意思就是將temp這個(gè)字符串的回車符'\r'全部替換為""空串 print re.sub(r'\r',"" , temp)
2.可以在后面添加'\n'換行符,這樣就會(huì)換行打印了,不會(huì)覆蓋掉之前的內(nèi)容。
import re #三個(gè)參數(shù)分別是要替換的正則表達(dá)式,要替換成的字符串,要替換的目標(biāo),下面的意思就是將temp這個(gè)字符串的回車符'\r'全部替換為'\r\n'回車換行符 print re.sub(r'\r','\r\n' , temp)
注意:
這里的回車符只影響打印,要是你直接寫入文件是不會(huì)出現(xiàn)問題的,另外要注意因?yàn)閰?shù)要用到和返回值都是字符串,可以先在之前把其他的處理完了再替換打印,不然可能格式變化會(huì)影響之后的處理。
python中\(zhòng)r的意義及用法
\r的意義
\r表示將光標(biāo)的位置回退到本行的開頭位置\b表示將光標(biāo)的位置回退一位
在python里print會(huì)默認(rèn)進(jìn)行換行,可以通過修改參數(shù)讓其不換行
(1) python2中可以在print語句的末尾加上逗號(hào),代碼如下:
print "hello", print "world"
執(zhí)行結(jié)果
hello world
請(qǐng)按任意鍵繼續(xù). . .
(2)在python3里print是一個(gè)獨(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ì)時(shí)功能
# 顯示倒計(jì)時(shí)
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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)一個(gè)自助取數(shù)查詢工具
在數(shù)據(jù)生產(chǎn)應(yīng)用部門,取數(shù)分析是一個(gè)很常見的需求,實(shí)際上業(yè)務(wù)人員需求時(shí)刻變化,最高效的方式是讓業(yè)務(wù)部門自己來取,減少不必要的重復(fù)勞動(dòng),本文介紹如何用Python實(shí)現(xiàn)一個(gè)自助取數(shù)查詢工具2021-06-06
Pyhton自動(dòng)化測試持續(xù)集成和Jenkins
這篇文章介紹了Pyhton自動(dòng)化測試持續(xù)集成和Jenkins,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
python三元運(yùn)算符實(shí)現(xiàn)方法
這篇文章主要介紹了python實(shí)現(xiàn)三元運(yùn)算符的方法,大家參考使用吧2013-12-12
python中ImageTk.PhotoImage()不顯示圖片卻不報(bào)錯(cuò)問題解決
這篇文章主要給大家介紹了關(guān)于在python中ImageTk.PhotoImage()不顯示圖片卻不報(bào)錯(cuò)問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
用Python實(shí)現(xiàn)QQ游戲大家來找茬輔助工具
這是一個(gè)用于QQ大家來找茬(美女找茬)的輔助外掛,開發(fā)的原因是看到老爸天天在玩這個(gè)游戲,分?jǐn)?shù)是慘不忍睹的負(fù)4000多。本來是想寫個(gè)很簡單的東西,但由于過程中老爸的多次嘲諷,逼得我不得不盡力完善,最后形成了一個(gè)小小的產(chǎn)品。2014-09-09

