寫了一個練手的爬蟲...在輸出的時候出現了讓人很不愉♂悅的問題 像這樣: 寫了一個練手的爬蟲...在輸出的時候出現了讓人很不愉♂悅的問題 像這樣: 令人十分難受啊! # 令人十分難受啊! # 在此之前先說一下python中的.format格式化輸出 python2.6開始,可以使用str.forma ...
寫了一個練手的爬蟲...在輸出的時候出現了讓人很不愉♂悅的問題
像這樣:
令人十分難受啊!
#-------------------------------------------------------------------------------------------------
在此之前先說一下python中的.format格式化輸出python2.6開始,可以使用str.format進行輕鬆的格式化,
如上可以看到,對變數的處理簡潔靈活,此外對數字的各種位數處理也很到位
{:<x}的語法表示左對齊(>為右對齊,^為居中),少於x位自動補齊(預設為空格補齊)
這裡值得註意的是,x也可以作為變數代入:
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)))
作者:killercars
來源:CSDN
原文:https://blog.csdn.net/excaliburrr/article/details/76794451
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!