将python程序转为二进制运行
还不太清楚能不能在没有python的环境下运行,因为实在好像现在linux都有python安装。
编译的过程如下:
>>> import py_compile
>>> py_compile.compile(’abc.py’)
还不太清楚能不能在没有python的环境下运行,因为实在好像现在linux都有python安装。
编译的过程如下:
>>> import py_compile
>>> py_compile.compile(’abc.py’)
虽然还没有用到wisted,但是发现很多文章都提到它,还是不错的。它是异步的、事件驱动的网络函数库。其它的我也不知道。。
这里给出一些文章的链接,回头再看。
Berkeley DB XML是一种原生的XML数据库,它允许将XML文档内容直接存储在数据库中。
由此,我想可以用它来存储一些简单的、不经常更新的、但是要求快速查询的数据。
我们通过一个简单的例子来说明,如何针对Berkeley DB XML来存储XML文档:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from bsddb.db import *
from dbxml import *
mgr = XmlManager()
uc = mgr.createUpdateContext()
container = mgr.openContainer("demo.dbxml", DB_CREATE)
filename = ‘demo’
fileContents = """<?xml version="1.0" encoding="UTF-8"?>
<result>OK</result>
"""
container.putDocument(filename, fileContents, uc)
在这个例子中,会创建一个名为demo.dbxml的数据库文件。
相应的,我们读取刚刚存储的内容,可以使用:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from bsddb.db import *
from dbxml import *
mgr = XmlManager()
container = mgr.openContainer("demo.dbxml")
container.addAlias("demo")
qc = mgr.createQueryContext()
results = mgr.query("collection(’demo’)/result", qc)
for value in results:
document = value.asDocument()
print document.getName(), "=", value.asString()
在实际应用过程中,发现当大量数据同时插入的时候,会产生类似以下的错误:
Traceback […]
什么是自省?
在日常生活中,自省(introspection)是一种自我检查行为。自省是指对某人自身思想、情绪、动机和行为的检查。伟大的哲学家苏格拉底将生命中的大部分时间用于自我检查,并鼓励他的雅典朋友们也这样做。他甚至对自己作出了这样的要求:“未经自省的生命不值得存在。”(请参阅参考资料以获取关于苏格拉底更多信息的链接。)
在计算机编程中,自省是指这种能力:检查某些事物以确定它是什么、它知道什么以及它能做什么。自省向程序员提供了极大的灵活性和控制力。一旦您使用了支持自省的编程语言,就会产生类似这样的感觉:“未经检查的对象不值得实例化。”
本文介绍了 Python 编程语言的自省能力。整个 Python 语言对自省提供了深入而广泛的支持。实际上,很难想象假如 Python 语言没有其自省特性是什么样子。在读完本文时,您应该能够非常轻松地洞察到自己 Python 对象的“灵魂”。
在深入研究更高级的技术之前,我们尽可能用最普通的方式来研究 Python 自省。有些读者甚至可能会争论说:我们开始时所讨论的特性不应称之为“自省”。我们必须承认,它们是否属于自省的范畴还有待讨论。但从本文的主旨出发,我们所关心的只是找出有趣问题的答案。
现在让我们以交互方式使用 Python 来开始研究。当我们从命令行启动 Python 时,就进入了 Python shell,在这里可以输入 Python 代码,而且立刻会从 Python 解释器获得响应。(本文中列出的命令可以使用 Python 2.2.2 正确执行。如果您使用较早的版本,则可能产生不同的结果或发生错误。可以从 Python 网站下载最新版本 [请参阅参考资料]。)
清单 1. 以交互方式启动 Python 解释器
$ python
Python 2.2.2 (#1, Oct 28 2002, 17:22:19)
[GCC 3.2 (Mandrake Linux 9.0 3.2-1mdk)] on linux2
Type “help”, “copyright”, “credits” or “license” […]
#!/usr/bin/env python
# $Id: examples.py,v 1.23 2005/09/25 23:36:42 gmf Exp $
# As of Python 2.3, there is a built-in module for Berkeley DB,
# called bsddb. The next uncommented line assumes that module is being used.
# If you are using your own bsddb3 module, use this line:
# from bsddb3.db import *
from bsddb3.db import *
from dbxml import *
book_content […]
字符串内码的转换,是开发中经常遇到的问题。
在Java中,我们可以先对某个String调用getByte(),由结果生成新String的办法来转码,也可以用NIO包里面的Charset来实现。
在Python中,可以对String调用decode和encode方法来实现转码。
比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作
s.decode(’gbk’).encode(’utf-8′)
可是,在实际开发中,我发现,这种办法经常会出现异常:
UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 30664-30665: illegal multibyte sequence
这是因为遇到了非法字符——尤其是在某些用C/C++编写的程序中,全角空格往往有多种不同的实现方式,比如\xa3\xa0,或者\xa4\x57,这些字符,看起来都是全角空格,但它们并不是“合法”的全角空格(真正的全角空格是\xa1\xa1),因此在转码的过程中出现了异常。
这样的问题很让人头疼,因为只要字符串中出现了一个非法字符,整个字符串——有时候,就是整篇文章——就都无法转码。
幸运的是,tiny找到了完美的解决办法(我因此被批评看文档不仔细,汗啊……)
s.decode(’gbk’, ‘ignore’).encode(’utf-8′)
因为decode的函数原型是decode([encoding], [errors=’strict’]),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;
如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。
Berkeley DB
产品首页 , 官方下载地址
Berkeley DB XML
产品首页 , 官方下载地址
首先,我们可以通过一个简单的例子来说明如何使用bsddb:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from bsddb import *
demodb = hashopen(’demo.db’, ‘c’)
for i in range(10):
demodb[’%d’%i] = ‘%d’%(i*i)
我们通过一个简单的例子来说明,如何针对Berkeley DB XML来存储XML文档:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from bsddb.db import *
from dbxml import *
mgr = XmlManager()
uc = mgr.createUpdateContext()
container = mgr.openContainer("demo.dbxml", DB_CREATE)
filename = ‘demo’
fileContents = """<?xml version="1.0" encoding="UTF-8"?>
<result>OK</result>
"""
container.putDocument(filename, fileContents, uc)
在这个例子中,会创建一个名为demo.dbxml的数据库文件。
相应的,我们读取刚刚存储的内容,可以使用:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from bsddb.db import *
from dbxml import […]