异常简单的一个代码生成器(python)

首先上一段生成的代码,很简单。但数据量很大时候也可以省下一小部分的工作量。


# -*- coding:utf-8 -*-
from core.dal.base_handler import BaseHandler
 
class GroupsHandler(BaseHandler):
 
    def select(self):
        return self.db.query("SELECT `g_id`, `g_name`, `create_time`, `status` FROM `groups` ORDER BY `g_id` DESC")
 
    def delete(self, id):
        return self.db.execute("DELETE FROM `groups` WHERE `g_id` = %s", id)
 
    def insert(self, g_name):
        return self.db.execute("INSERT INTO `groups` (`g_name`) VALUES (%s)", g_name)

重要的是这个生成器只有简单的百多行代码。再加上一些简单的生成services层的逻辑,短时间做一些对表的增删查还是很方便的,至于更复杂的慢慢扩充吧。

生成器下载地址:http://chairo.free.fr/down/build.py

生成器中用到的BaseHandler下载地址: http://chairo.free.fr/down/base_handler.py

Via:Chairo@2012年02月21日-EOF-

python下载数据

亲爱的BSSN给了一个flash游戏的数据库,还给了一个通过wget下载其中flash游戏数据的教程。测试中发现那个教程中wget方式下载数据经常下载到一半碰到出错或者什么原因给自动退出了。

趁这两天换工作有点时间,操刀python写了一段小脚本:

# -*- coding:utf-8 -*-
import os.path
import urllib2
 
def header(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6',
        'Referer':'http://www.xxx.net/'
    }
 
    req = urllib2.Request(
        url = url,
        headers = headers
    )
    result = urllib2.urlopen(req).read()
    return result
 
f = open('flash.txt', 'r')
for line in open('flash.txt', 'rb'):
    if not os.path.isfile(line.rstrip()):
        _file = line.rsplit('/',1)[1]
        try:
            File = open('files/flash/%s'%_file.rstrip(), "wb" )
            File.write(header("http://www.xxx.net/games/files/%s"%_file.rstrip()))
            File.close()
        except Exception, what:
            print what
        print _file

下载完共6G多的数据,周五再调试一下准备弄一个简单站点把这些数据放上去看看效果了。

Via:Chairo@2012年02月16日-EOF-

python所谓文艺短网址生成方式代码

最近都没有写什么python和php的代码,工作非常充实,晚上也没有什么精神继续写代码。今天翻到一段写生成短网址的算法blog,发现俺用的是最2B的随机数方式……

为了表示不那么2B,特意写了段生产短地址的在该文章中所写的文艺代码:


def shortByHex(url):
    '''url缩短'''
    import hashlib
    _seed = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    _hex = hashlib.md5(url).hexdigest()
    _hexLen = len(_hex)
    _subHexLen = _hexLen / 8
    _output = []
 
    for i in xrange(0, _subHexLen):
        _subHex = _hex[i*8:i*8+8]
        _subHex = 0x3FFFFFFF&int(1*('0x%s'%_subHex), 16)
        _o = []
        for n in xrange(0, 6):
            _index = 0x0000003D & _subHex
            _o.append(_seed[int(_index)])
            _subHex = _subHex >> 5
        _output.append(''.join(_o))
    return _output
 
print shortByHex("password")
Via:Chairo@2012年01月12日-EOF-

python的functools.partial用法解释

在使用bottle的jinja2_template过程中碰到了一个自定义filter的问题,其中bottle关于jinja2_template的定义是这样的:

jinja2_template = functools.partial(template, template_adapter=Jinja2Template)

在.NET中class也是有partial这个概念的,所以从字面理解,jinja2_template应该是template和后边template_adapter=Jinja2Template这个参数之和的结果。官方的解释为:

Return a new partial object which when called will behave like func called with the positional arguments args and keyword arguments keywords.

官方给的例子:
from functools import partial
basetwo = partial(int, base=2)
basetwo.__doc__ = 'Convert base 2 string to an int.'
basetwo('10010')
18

不管你懂没懂,反正我是没懂。最后Google了下,在这里找到一个简单易懂的例子。摘录如下:

import functools
def add(a, b):
    return a + b
 
add(4, 2)
6
plus3 = functools.partial(add, 3)
plus5 = functools.partial(add, 5)
plus3(4)
7
plus3(7)
10
plus5(10)
15

函数的partial应用
典型的,函数在执行时,要带上所有必要的参数进行调用。然后,有时参数可以在函数被调用之前提前获知。这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。

所以bottle中使用jinja2_template即等同于template(你传入参数, template_adapter=Jinja2Template)。稍后的文章会再说明如何自定义filters

Via:Chairo@2011年11月17日-EOF-

python property用法

property用来设置/读取一个类的属性,今天用到此方法记录一下备忘。官方文档描述如下:


property([fget[, fset[, fdel[, doc]]]])

class C(object):
    def __init__(self):
        self._x = None
 
    def getx(self):
        return self._x
    def setx(self, value):
        self._x = value
    def delx(self):
        del self._x
    x = property(getx, setx, delx, "I'm the 'x' property.")
Via:Chairo@2011年11月05日-EOF-