代码改变世界

Python 插件杂谈 (1) ---- chardet

2013-07-31 10:58  江湖么名  阅读(384)  评论(0编辑  收藏  举报

 Python做为一门应用广泛,粉丝众多的语言。吸引了无数的开发者为其添砖加瓦。笔者使用python逾一个月,就接触了许多 python插件,写篇文章,仅做记录.
    第一个介绍的是 chardet. chardet是为了探测python中字符集问题而开发的插件。

  1. >>> import urllib
  2. >>> urlread = lambda url: urllib.urlopen(url).read()
  3. >>> import chardet
  4. >>> chardet.detect(urlread("http://google.cn/"))
  5. {'encoding': 'GB2312', 'confidence': 0.99}
复制代码

  先介绍一下,urllib 是 python 中获取网页内容的插件。  使用urllib.open(url).read() 可以获取网页内容。 lambda 我想大家都了解了,是python基本语法,有点像java的匿名函数。
   言归正传,使用 chardet.detect() 可以 “猜测” 一段内存中字符段的编码。 为什么说 猜测, 因为字符集与字符集之间并非一点都不同。而是有部分一样,有部分不一样。不管是 vim 还是 emacs ,几乎在查看文本编码的时候都是靠猜的。 看python的输出,就可以看到,它觉得 99%的概率,这个字符集是 GB2312.
   下面看一段高级应用:

  1. import urllib
  2. from chardet.universaldetector import UniversalDetector
  3. usock = urllib.urlopen('http://yahoo.co.jp/')
  4. detector = UniversalDetector()
  5. for line in usock.readlines():
  6.     detector.feed(line)
  7.     if detector.done: break
  8. detector.close()
  9. usock.close()
  10. print detector.result
  11. {'encoding': 'EUC-JP', 'confidence': 0.99}   
复制代码

 

     应用背景是,如果需要大量地侦测,那么频繁调用 detect() 方法就会降低效率。那么这时候,可以使用全局的detect, 即通过循环的方式不断地用 feed() 方法 加入字符串,达到高效率的最低要求,就会调用  detect() 函数检测 ,把 UniversalDetector  对象的 done 置为 True.  这时候查看 result 属性,就可以知道结果啦!


   以上是我使用chardet的心得,希望对大家能有 帮助。我的叙述如果有问题,请大家看英语文档吧,具体地址在这里: chardet 文档
   最后奉上插件,  。 至于安装,就是解压后,执行文件夹里的 setup.py . 命令如下:
python  setup.py  install
   OK,终于写完一贴。你有没有得到帮助呢?如果有的话呢,请给我一个回复吧,给我个小小的鼓励,谢谢!