淺談python str.format與制表符\t關(guān)于中文對(duì)齊的細(xì)節(jié)問題
寫了一個(gè)練手的爬蟲...在輸出的時(shí)候出現(xiàn)了讓人很不愉♂悅的問題
像這樣:

令人十分難受??!
#------------------------------------------
在此之前先說一下python中的.format格式化輸出

python2.6開始,可以使用str.format進(jìn)行輕松的格式化,
如上可以看到,對(duì)變量的處理簡(jiǎn)潔靈活,此外對(duì)數(shù)字的各種位數(shù)處理也很到位
{:<x}的語法表示左對(duì)齊(>為右對(duì)齊,^為居中),少于x位自動(dòng)補(bǔ)齊(默認(rèn)為空格補(bǔ)齊)
這里值得注意的是,x也可以作為變量代入:

#------------------------------------------
著手解決問題,
第一反應(yīng)使用\t制表符,帶來的問題便是字符串長度差距超過一個(gè)制表位時(shí),會(huì)跳到下一個(gè)制表位,如圖:

不能接受,使用str.format補(bǔ)齊name屬性的長度為25
結(jié)果卻是這樣的:

py雖好,有些細(xì)節(jié)還是沒有照顧到中文
這里補(bǔ)齊長度時(shí)中文字符也按1字節(jié)計(jì)算了,
然而我們知道,utf-8中中文占用3個(gè)字節(jié),GBK中占用了2個(gè)字節(jié),只算作1字節(jié)顯然不能對(duì)齊
這時(shí)求助于prettytable包輸出表格,然而輸出也不理想,可以想象也沒有考慮中文編碼的問題(或是需要設(shè)置編碼為utf-8或gbk?)
分析一下理想的name所占的長度,應(yīng)為固定的x字節(jié)(這里按目前的爬取結(jié)果暫時(shí)取22)
那么他的補(bǔ)齊長度應(yīng)為
len = 22 - gbk編碼下name的字節(jié)數(shù) + name的字符數(shù)
幸運(yùn)的是str.format支持使用變量代替補(bǔ)齊長度的值
嘗試以下代碼:
print('[{name:<{len}}x'.format(name=name+']',len=22-len(name.encode('GBK'))+len(name)))
結(jié)果十分接近理想了:

還是有一些迷之問題導(dǎo)致1-0.5字節(jié)長度的偏差,猜測(cè)是由于中文字體不是等寬字體的緣故?
然而不用多慮,這里就可以使用一記粗暴的制表符\t解決問題了
print('[{name:<{len}}\tx'.format(name=name+']',len=22-len(name.encode('GBK'))+len(name)))

大功告成!鏘鏘!
#------------------------------------------
后話
這次寫的主要是一個(gè)爬取幾個(gè)主要交易網(wǎng)站以及steam上dota2飾品價(jià)格的爬蟲,里面遇到的問題其實(shí)也挺多的比如登錄動(dòng)態(tài)加載等等
等寫的比較完善了大概也會(huì)一起發(fā)上來啦~
以上這篇淺談python str.format與制表符\t關(guān)于中文對(duì)齊的細(xì)節(jié)問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用Python在一個(gè)文件的頭部插入數(shù)據(jù)的實(shí)例
下面小編就為大家分享一篇利用Python在一個(gè)文件的頭部插入數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Django 如何使用日期時(shí)間選擇器規(guī)范用戶的時(shí)間輸入示例代碼詳解
這篇文章主要介紹了 Django 如何使用日期時(shí)間選擇器規(guī)范用戶的時(shí)間輸入,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
一文帶你了解Python 四種常見基礎(chǔ)爬蟲方法介紹
這篇文章主要介紹了一文帶你了解Python 四種常見基礎(chǔ)爬蟲方法介紹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Python自動(dòng)化之?dāng)?shù)據(jù)驅(qū)動(dòng)讓你的腳本簡(jiǎn)潔10倍【推薦】
數(shù)據(jù)驅(qū)動(dòng)是一種思想,讓數(shù)據(jù)和代碼進(jìn)行分離。這篇文章主要介紹了Python自動(dòng)化之?dāng)?shù)據(jù)驅(qū)動(dòng),讓你的腳本簡(jiǎn)潔10倍,需要的朋友可以參考下2019-06-06
Python光學(xué)仿真學(xué)習(xí)處理高斯光束分布圖像
這篇文章主要為大家介紹了Python光學(xué)仿真學(xué)習(xí)之如何處理高斯光束的分布圖像,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
Python使用socket_TCP實(shí)現(xiàn)小文件下載功能
這篇文章主要介紹了Python使用socket_TCP實(shí)現(xiàn)小文件下載功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Python用requests模塊實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁爬蟲
大家好,本篇文章主要講的是Python用requests模塊實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁爬蟲,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02

