• 博客开通了,标记一个:) a new start [2007-12-29 13:53]
  • [转] 几个第三方 Python 库

    2008-09-25 18:17:12 by deepblue
    转自:http://blog.csdn.net/lanphaday/archive/2008/09/23/2966811.aspx

    作者:赖勇浩(http://blog.csdn.net/lanphaday)

    wxPython 如果你之前是 windows 程序员,用 MFC 或者 WIN32API 开发界面程序,那进入 Python 国度最好的 GUI 选择应该是 wxPython。它是 wxWidgets 的 Python Bind,与 wxWi...
  • Python的lambda函数与排序

    2008-06-19 23:13:34 by deepblue
    前几天看到了一行求1000的阶乘的Python代码:

    print   reduce(lambda   x,y:x*y,   range(1,   1001))

    一下子被python代码的精简与紧凑所折服,故对代码进行了简单的分析。

    reduce与range都是Python的内置函数。

    range(1,1001)表示生成1到1000的...
  • Dictionary的排序

    2008-06-01 02:01:51 by deepblue

    我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value。可是有时我们需要对dictionary中的item进行排序输出,可能根据key,也可能根据value来排。到底有多少种方法可以实现对dictionary的内容进行排序输出呢?下面摘取了一些精彩的解决办法。

    #最简单的方法,这个是按照key值排序:
    def sortedDictValues1(adict):
        items = adict.items()
        items.sort()
        return [value for key, value in items]

    #又一个按照key值排序,貌似比上一个速度要快点
    def sortedDictValues2(adict):
        keys = adict.keys()
        keys.sort()
        return [dict[key] for key in keys]

    #还是按key值排序,据说更快。。。而且当key为tuple的时候照样适用
    def sortedDictValues3(adict):
        keys = adict.keys()
        keys.sort()
        return map(adict.get, keys)

    #一行语句搞定:
    [(k,di[k]) for k in sorted(di.keys())]

    #来一个根据value排序的,先把item的key和value交换位置放入一个list中,再根据list每个元素的第一个值,即原来的value值,排序:
    def sort_by_value(d):
        items=d.items()
        backitems=[[v[1],v[0]] for v in items]
        backitems.sort()
        return [ backitems[i][1] for i in range(0,len(backitems))]

    #还是一行搞定:
    [ v for v in sorted(di.values())]

    #用lambda表达式来排序,更灵活:
    sorted(d.items(), lambda x, y: cmp(x[1], y[1])), 或反序:
    sorted(d.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)

    #用sorted函数的key= 参数排序:
    # 按照key进行排序
    print sorted(dict1.items(), key=lambda d: d[0])
    # 按照value进行排序
    print sorted(dict1.items(), key=lambda d: d[1])

    下面给出python内置sorted函数的帮助文档:
    sorted(...)
        sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

    看了上面这么多种对dictionary排序的方法,其实它们的核心思想都一样,即把dictionary中的元素分离出来放到一个list中,对list排序,从而间接实现对dictionary的排序。这个“元素”可以是key,value或者item。

     

    参考资料:
    http://aspn.activestate.com/ASPN/Python/Cookbook/Recipe/52306
    http://www.javaeye.com/topic/117279

  • The Zen of Python

    2008-05-18 02:06:42 by deepblue

    在Python解释器中输入import  this ,则会显示出Tim Peters的《Python之禅》

    The Zen of Python, by Tim Peters

    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!

  • urllib2设置UserAgent

    2008-05-02 02:05:39 by deepblue

    在编写Python脚本抓取某些网站的网页时,有可能会遇到禁止spider的网站,程序将不能直接抓取这种网站的网页。对于这样的网站,需要设置http连接的UserAgent,将程序伪装成浏览器对该网页的访问,即可顺利抓取网页。

    例子如下:

    import urllib2

    url="http://www.amazon.cn/mn/productReviewApplication?&uid=000-0000000-0000000 &prodid=raitasa072";
    request = urllib2.Request(url)
    request.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 (FoxPlus) Firefox/2.0.0.14')
    reader= urllib2.urlopen(request)
    print reader.read()
     
    红色部分代码表示将http  request头中的UserAgent设置为与firefox的UserAgent一致,即相当于将程序伪装成普通浏览器,这样一般的网站就不会禁止程序抓取网页了。
     
    推荐一个查询自己浏览器的UserAgent的网站:www.useragent.org,打开这个网站的主页,即可看到自己当前浏览器的UserAgent字符串,同时还可以查询自己的ip地址。

  • Python写MySQL数据库乱码

    2008-04-24 19:03:15 by deepblue

    MySQL数据库的默认编码已经设置为utf8了,在python程序内也已经把字符串的编码转换成了utf8,可是通过MySQLdb插入数据库后,显示的还是一堆乱码。

    后来发现是建立数据库连接时的问题:

    conn = MySQLdb.connection(host="localhost",
    user="root",
    passwd="password",
    db="test",
    use_unicode=True,
    charset="utf-8"
    )

    之前在获得数据库连接时,没有写后面红色部分两个参数,以为数据库默认编码和字符串编码都为utf8,就能正确插入为utf8的字符串了。

    添加了红色部分的参数后,正常插入,问题解决。 

    P.S. 在插入数据库时一定要注意字符串中的单引号,因为MySQL数据库中单引号为特殊字符,若原始数据中含有单引号,必须连写两个才能正确插入。如  Aaron's  book, 插入数据库时应写为  Aaron''s book

  • 程序执行时暂停指定时间

    2008-04-23 01:09:10 by deepblue

    今天在做一个小的python程序时,需要用到 使程序暂停指定时间间隔的功能,如下:

    import time

    time.sleep(10)

    时间单位为秒。 

  • Python获取系统默认字符编码

    2008-04-22 00:41:31 by deepblue

    在Python代码中,普通字符串的编码方式与程序源文件编码方式一致的,而很多IDE在默认情况下,将程序源文件按照系统默认字符编码来保存的。

    下面给出用Python获取系统默认编码的例子:

    #!/usr/bin/env python
    #coding=utf-8
    """
        获取系统默认编码
    """
    import sys
    print sys.getdefaultencoding()

    该段程序在英文WindowsXP上输出为:

    ascii