Untitled Post - 74
openlayers 3 is released! ol3’s homesite change to http://openlayers.org/
openlayers 3 is released! ol3’s homesite change to http://openlayers.org/
import module后,可以使用module.__file__查看模块源文件所在路径,dir(module)查看模块导出的符号 — Python
金山快盘应该出个英文版
python里没有递增运算符++
和递减运算符--
,还好可以使用+=
和-=
运算符。
Python的条件表达式或叫三元操作符与其他语言有很大的不同,其格式为: result_while_condition_is_true if condition else result_while_condition_is_false,如果condition为True,整个条件表达式的值为result_while_condition_is_true,否则整个条件表达式的值为result_while_condition_is_false
1 | BaseException |
===
[erq]
首先使用brew安装unixodbc和mdbtools,unixodbc是odbc驱动管理器,mdbtools提供了一组mdb操作工具,更重要的是mdbtools提供了mdb驱动程序。
1 | $ brew install unixodbc |
但是安装完成后发现/usr/local/lib目录中没有mdbtools驱动动态链接库libmdbodbc.dylib
查看mdbtools选项可以发现:
1 | $ brew options mdbtools |
mdbtools formula并没有提供--with-unixodbc
选项,默认也没有build mdb驱动,因此需要手动来编译安装mdbtools提供的mdb driver
编译安装libmdbodbc
brew安装mdbtools时已经将mdbtools的源码包下载到了目录/Library/Caches/Homebrew/,所以直接使用这个源码包编译安装就可以了。
1 | $ tar zxvf mdbtools-0.7.1 |
这样libmdbodbc驱动程序就安装到了/usr/local/lib目录下。libmdbodbc的源代码就在src/odbc目录下。
配置unixodbc
因为brew的所有包都安装在/usr/local下面,因此这里配置unixodbc应该使用/usr/local/etc/目录下的odbcinst.ini和odbc.ini文件。
odbcinst.ini配置如下:
1 | \[MDBTools\] |
然后就可以像linux平台上一样来访问mdb文件了。
1 | $ python3 |
因为这里也是使用mdbtools提供的odbc驱动,所以和pypyodbc配合使用时仍然存在中文字符编码转换的问题,和linux平台上一样处理即可。
===
[erq]
当前1.3.3版本的pypyodbc在linux系统上面已经可以读取有中文字符的mdb文件,不再出现异常,但是读取的中文字符却全是乱码。
下面是根据一些现象的合理推论:
mdb文件来自于windows系统,其中的中文字符使用GB编码无疑,但linux系统上mdbtools提供的odbc驱动底层已经执行了编码转换,将GB码转换为unicode码,pypyodbc再一次进行转换所以出现了问题。
pypyodbc.connect函数有一个参数unicode_results,在python3版本上默认为True,也就是返回unicode编码的结果集。
odbc底层驱动转换一次编码,pypyodbc再转换一次,悲剧不可避免的出现了。
因此设定connect函数的unicode_results为False,也就是原样返回结果集,然后结果集中的字段名和字段值都需要解码为unicode字符串:
1 | $ python3 |
decode(‘UTF-8’)解码成功,说明mdbtools的odbc驱动返回的结果集已经是unicode编码格式。
===
[erq]
发现一个靠谱的python tkinter可视化界面设计器,page,仍在活跃开发,支持python 2.7和3.2, 经测最新的python 3.4也没问题。
下载后,解压执行page.tcl即可,不要执行page。
不过page.tcl需要做小小的修改,最前面三行修改为如下行:
1 | #!/bin/sh |
使用方法很简单,添加一个toplevel,然后拖拉组件,设置组件的属性,最后生成py模块,然后再添加事件处理函数就差不多了。
===
[erq]