Python做為一門應用廣泛,粉絲眾多的語言。吸引了無數的開發人員為其添磚加瓦。筆者使用python逾一個月,就接觸了許多 python外掛程式,寫篇文章,僅做記錄.
第一個介紹的是 chardet. chardet是為了探測python中字元集問題而開發的外掛程式。
- >>> import urllib
- >>> urlread = lambda url: urllib.urlopen(url).read()
- >>> import chardet
- >>> chardet.detect(urlread("http://google.cn/"))
- {'encoding': 'GB2312', 'confidence': 0.99}
複製代碼
先介紹一下,urllib 是 python 中擷取網頁內容的外掛程式。 使用urllib.open(url).read() 可以擷取網頁內容。 lambda 我想大家都瞭解了,是python基本文法,有點像java的匿名函數。
言歸正傳,使用 chardet.detect() 可以 “猜測” 一段記憶體中字元段的編碼。 為什麼說 猜測, 因為字元集與字元集之間並非一點都不同。而是有部分一樣,有部分不一樣。不管是 vim 還是 emacs ,幾乎在查看文本編碼的時候都是靠猜的。 看python的輸出,就可以看到,它覺得 99%的機率,這個字元集是 GB2312.
下面看一段進階應用程式:
- import urllib
- from chardet.universaldetector import UniversalDetector
- usock = urllib.urlopen('http://yahoo.co.jp/')
- detector = UniversalDetector()
- for line in usock.readlines():
- detector.feed(line)
- if detector.done: break
- detector.close()
- usock.close()
- print detector.result
- {'encoding': 'EUC-JP', 'confidence': 0.99}
複製代碼
應用背景是,如果需要大量地偵測,那麼頻繁調用 detect() 方法就會降低效率。那麼這時候,可以使用全域的detect, 即通過迴圈的方式不斷地用 feed() 方法 加入字串,達到高效率的最低要求,就會調用 detect() 函數檢測 ,把 UniversalDetector 對象的 done 置為 True. 這時候查看 result 屬性,就可以知道結果啦!
以上是我使用chardet的心得,希望對大家能有 協助。我的敘述如果有問題,請大家看英語文檔吧,具體地址在這裡: chardet 文檔
最後奉上外掛程式, 。 至於安裝,就是解壓後,執行檔案夾裡的 setup.py . 命令如下:
python setup.py install
OK,終於寫完一貼。你有沒有得到協助呢?如果有的話呢,請給我一個回複吧,給我個小小的鼓勵,謝謝!
轉載文章,請註明來自: 米趣網