:python

py2exe打包BeautifulSoup遇到问题及解决

今天用py2exe打包一个小程序,但是怎么都不能够找到BeautifulSoup模块,经过Google得知,py2exe无法读取压缩的egg文件,解决方法重新用解压方法安装BeautifulSoup,同时发现pip比easy_install要更方便,于是安装了pip。OK,打包成功,大功告成。

Python实现图书10位ISBN号转换为13位

ISBN是图书的一个国际通用编号,详细信息可参考维基百科中的词条:http://zh.wikipedia.org/wiki/ISBN

ISBN在07年前使用的是10位编号,07年后并入国际货品编号,升级为13位,以下为将10位编号转换为13位编号的Python代码:

def isbn10to13(isbn):
    if len(isbn) != 10:
        return None
    isbn = "978"+isbn[:-1]
    sum = 0
    for i, b in enumerate(isbn):
        sum += (1 if i % 2 == 0 else 3) * int(b)
    return "%s%d" % (isbn, (10 - sum % 10) % 10)

输入内容为10位的ISBN号去除连接符“-”的字符串,输出内容为13位的ISBN号去除连接符“-”的字符串。主要的工作在于计算出最后一位的校验码。

Redis在Windows下的安装配置及Python调用

Redis是一个Key-Value数据库,优点是简单,高效,稳定;缺点是所有数据存放于内存(会定期dump到磁盘),当然内存小时可以配置虚拟内存,不过性能会有所下降。 官方只提供源代码下载,并且不支持Windows,可从第三方下载Windows下的预编译文件,下载地址:

https://github.com/dmajkic/redis/downloads

解压后,所有命令均在一个目录下,服务器端直接运行redis-server.exe即可,如果需要特殊配置,可以指定配置文件或者使用redis-client进行配置。配置文件其实就是配置命令的一个集合。redis的配置命令(2.2之后)可以做到在不重启服务的情况下生效,包括redis版本更新,slave转为master等等。

Redis的Python接口目前比较成熟的是redis-py,项目地址为https://github.com/andymccurdy/redis-py,通过git可将源码下载到本地,git的安装和使用请参考[《Git使用123》](http://www.lunny.info/html/2011/01/24/625330.html)。

git clone https://github.com/andymccurdy/redis-py.git
cd redis-py
python setup install

redis-py的使用请参考https://github.com/andymccurdy/redis-py

一个Python函数:执行MySQL的SQL文件

有些时候,我们需要通过python来执行SQL文件,那么这个函数就有用武之地了。调用之前确保安装了mysql。Linux和Windows应该是都可以用的,Linux下没有测试过。

from subprocess import Popen, PIPE

def excSQLFile(host, db, user, passwd, charset, filename):
    process = Popen('mysql -h%s -D%s -u%s -p%s --default-character-set=%s' \
        % (host, db, user, passwd, charset),
        stdout=PIPE, stdin=PIPE, shell=True)
    output = process.communicate('source ' + filename)[0]
    return output

Tornado在Windows下解析文件mime类型错误一则及解决

今日遇到一则错误,tornado服务器在解析文件的mime类型时报错,无法获取,错误如下。

codeUnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0

出错误原因: Windows注册表中保存的mime类型对应项中包含非ascii字符

解决方法: 执行regedit,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Content Type 在其中找到非英文字母的mime类型,例如我遇到的“视频/x-m4v”,删除即可。

如何避免: 有些程序在安装时会新增一些mime类型,如果胡乱加,那么肯定就会出问题。我遇到的这个问题,估计是哪个视频播放软件犯了一个低级错误,不该翻译的地方翻译了。这个错误一般情况下不会有什么危害,真正除了问题却有可能摸不着头脑。

附: mime类型标准的网址:http://www.iana.org/assignments/media-types/。访问可以看到,顶级类型里不包含“视频”,只有“vedio”。