python對齊輸出


這個問題煩惱了挺久,一般情況下我都是用\t解決,但其實這樣的辦法並不是很nice,然后今天在寫一個demo的時候實在看不下去,就百度科普了一波,確實是有比較nice的解決方案。

像這樣:

 

令人十分難受啊!

#-------------------------------------------------------------------------------------------------

在此之前先說一下python中的.format格式化輸出

python2.6開始,可以使用str.format進行輕松的格式化,

如上可以看到,對變量的處理簡潔靈活,此外對數字的各種位數處理也很到位

{:<x}的語法表示左對齊(>為右對齊,^為居中),少於x位自動補齊(默認為空格補齊)

這里值得注意的是,x也可以作為變量代入:

 

#-----------------------------------------------------------------------------------------------------

着手解決問題,

第一反應使用\t制表符,帶來的問題便是字符串長度差距超過一個制表位時,會跳到下一個制表位,如圖:

不能接受,使用str.format補齊name屬性的長度為25

結果卻是這樣的:

  

py雖好,有些細節還是沒有照顧到中文

這里補齊長度時中文字符也按1字節計算了,

然而我們知道,utf-8中中文占用3個字節,GBK中占用了2個字節,只算作1字節顯然不能對齊

這時求助於prettytable包輸出表格,然而輸出也不理想,可以想象也沒有考慮中文編碼的問題(或是需要設置編碼為utf-8或gbk?)

分析一下理想的name所占的長度,應為固定的x字節(這里按目前的爬取結果暫時取22)

那么他的補齊長度應為

len = 22 - gbk編碼下name的字節數 + name的字符數

幸運的是str.format支持使用變量代替補齊長度的值

嘗試以下代碼:

print('[{name:<{len}}x'.format(name=name+']',len=22-len(name.encode('GBK'))+len(name)))

結果十分接近理想了:

還是有一些迷之問題導致1-0.5字節長度的偏差,猜測是由於中文字體不是等寬字體的緣故?

然而不用多慮,這里就可以使用一記粗暴的制表符\t解決問題了

print('[{name:<{len}}\tx'.format(name=name+']',len=22-len(name.encode('GBK'))+len(name)))

大功告成!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM