我爱python


其实这个问题最关键的地方就是需要保留cookie,简单的解答就是使用urllib2里面的HTTPCookieProcessor(),如下:

  1. import urllib2
  2. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())    #构造带cookie处理的客户端

详细的看这篇文章

PIL是比较常用的python图片处理模块,刚才学习了一下如果将一个图片叠加在另外一个图片上面的方法。
例子代码如下:

下载: im.py
  1. import Image
  2. n12090 = Image.new('RGB',(120,90),'black')
  3. n12060 = Image.new('RGB',(120,70),'white')
  4. n12090.paste(n12060,(0,10))
  5. n12090.show()

更加详细的方法看上面的handbook :)
在这里顺便推荐下coolcode插件

为了这个mysql转义字符串问题,以前折腾了很久,都是自己写的一个简单函数。

昨天才发现MySQLdb里面自带了escape_string函数,非常好用。

  1. import MySQLdb
  2. s = """test!42''354542"""
  3. print MySQLdb.escape_string(s)

在python中操作Mysql数据库一般是使用MySQLdb或adodb,但是MySQLdb使用起来有点麻烦,所以平时我都是用adodb来操作mysql数据库。

adodb 有个非常不爽的地方就是无法连接非标准端口(3306)的mysql数据库,这种情况下只能使用MySQLdb了。某台服务器上因为软件兼容问题,同时使用着mysql4.1 和 mysql 5.0 两个数据库软件,mysql 4.1端口是3336。 今天写个程序需要连接这个3336的mysql数据库,本来想凑合着用MySQLdb的,只是觉得非常不爽。adodb也是调用MySQLdb的,为什么不支持非标准端口呢?于是,俺花时间hack一把adodb。

adodb是 Debian Etch 自带的,我想其他版本也是差不多,有同样需求的同学可以看看。

第一个修改的文件: /var/lib/python-support/python2.4/adodb/adodb.py

修改的是 class ADOConnection 中的 Connect函数:

下载: dbport.py
  1. def Connect(self,host=None,user=None,password=None,database=None,port=None):
  2.     self.database = database
  3.     self.host = host
  4.     self.user = user
  5.     self.password = password
  6.     if port == None :
  7.         self._connect(host,user,password,database)
  8.     else :
  9.         self.port = port
  10.         self._connect(host,user,password,database,port)
  11. return bool(self._conn)

在函数的参数增加了port=None,连接加入port参数的时候,传过去的_connect也加上port。

第二个修改的是 /var/lib/python-support/python2.4/adodb/adodb_mysql.py
修改 class adodb_mysql(adodb.ADOConnection) 的_connect函数如下:

  1. def _connect(self,host=None,user=None,password=None,database=None,port=3306):
  2.     self._conn = MySQLdb.connect(host, user, password, database,port)

现在,可以使用非标准端口的mysql了

  1. import adodb
  2. conn = adodb.NewADOConnection('mysql')
  3. conn.Connect('127.0.0.1', 'user', 'password', 'mydb',3336)