Differences between revisions 1 and 17 (spanning 16 versions)
Revision 1 as of 2004-08-09 23:28:59
Size: 6189
Editor: Zoom.Quiet
Comment:
Revision 17 as of 2004-12-22 10:42:05
Size: 9019
Editor: ZoomQuiet
Comment:
Deletions are marked like this. Additions are marked like this.
Line 10: Line 10:
=== 提取网页中的超链接 ===
{{{#!python
r='<a(?:(?:\\s*.*?\\s)|(?:\\s+))href=(?P<url>\S*?)(?:(?:\\s.*>)|(?:>)).*?</a>'
compile(r).findall(a)
}}}
 * 这个是hoxide和天成讨论出来的方法,用来提取网页中的超链接.
=== 解决在 Python 中登录网站的问题 ===
{{{
刚刚看了xyb的代码,有点启发。
写了一小段试了以下,可以登录了。呵呵。
import httplib
import urllib
user=?
pwd=?
params=urllib.urlencode({"Loginname":user,"Loginpass":pwd,"firstlogin":1,"option":"登入论坛"})
headers={"Accept":"text/html","User-Agent":"IE","Content-Type":"application/x-www-form-urlencoded"}
website="www.linuxforum.net"
path="/forum/start_page.php"
conn=httplib.HTTPConnection(website)
conn.request("POST",path,params,headers)
r=conn.getresponse()
print r.status,r.reason
data=r.read()
print data
conn.close()

不知从form submit数据和直接提交request有些什么区别?

}}}
 * [http://www.linuxforum.net/forum/showflat.php?Cat=&Board=python&Number=493559 中国Linux论坛]
 * '''由xyb总结''':["PythonClientCookie"]
=== 浮点数的输出格式 ===
{{{
>>> a=6200-6199.997841
>>> a
0.0021589999996649567
>>> print "%f"%a
0.002159
>>> import fpformat
>>> fpformat.fix(a, 6)
'0.002159'
>>> print fpformat.fix(a, 6)
0.002159
>>> print "%.6f"%a
0.002159
>>> print "%.7f"%a
0.0021590
>>> print "%.10f"%a
0.0021590000
>>> print "%.5f"%a
0.00216
}}}
Line 101: Line 152:
=== traceback 的处理 ===

from::[http://www.donews.net/limodou/archive/2004/07/09/40045.aspx Limodou的学习记录]

trackback在 Python 中非常有用,它可以显示出现异常(Exception)时代码执行栈的情况。
但当我们捕捉异常,一般是自已的出错处理,因此代码执行栈的信息就看不到了,如果还想显
示的话,就要用到traceback模块了。

这里只是简单的对traceback模块的介绍,不是一个完整的说明,而且只是满足我个人的要求,
更详细的还是要看文档。

打印完整的traceback

让我们先看一个traceback的显示:

{{{
>>> 1/0

Traceback (most recent call last):
  File "", line 1, in -toplevel-
    1/0
ZeroDivisionError: integer division or modulo by zero
}}}

可以看出 Python 缺省显示的traceback有一个头:第一行,出错详细位置:第二、三行,
异常信息:第四行。也就是说分为三部分,而在traceback可以分别对这三部分进行处理。
不过我更关心完整的显示。

在traceback中提供了print_exc([limit[, file]])函数可以打印出与上面一样的效果。
limit参数是限定代码执行栈的条数,file参数可以将traceback信息输出到文件对象中。缺省的话是输出到错误输出中。举例:

{{{
>>> try:
    1/0
except:
    traceback.print_exc()
 
Traceback (most recent call last):
  File "", line 2, in ?
ZeroDivisionError: integer division or modulo by zero
}}}

当出现异常sys.exc_info()函数会返回与异常相关的信息。如:

{{{
>>> try:
    1/0
except:
    sys.exc_info()

(<class exceptions.ZeroDivisionError at 0x00BF4CC0>,
<exceptions.ZeroDivisionError instance at 0x00E29DC8>,
<traceback object at 0x00E29DF0>)
}}}

sys.exc_info()返回一个tuple,异常类,异常实例,和traceback。

print_exc()是直接输出了,如果我们想得到它的内容,如何做?使用
format_exception(type, value, tb [,limit]),type, value, tb分别对应
sys.exc_info()对应的三个值。如:

{{{
>>> try:
    1/0
except:
    type, value, tb = sys.exc_info()
 print traceback.format_exception(type, value, tb)

['Traceback (most recent call last):\n', ' File "", line 2, in ?\n',
'ZeroDivisionError: integer division or modulo by zero\n']
}}}

这样,我们知道了format_exception返回一个字符串列表,这样我们就可以将其应用到我们的程序中了。
Line 103: Line 228:
from:: [http://blog.huangdong.com] (即将成为历史的HD的个人blog,大家默哀) :)
'''
多进程处理让很多开发人员转向了线程处理的操作,但是,在一些特别的情况下,我们必须考虑两个完全不同的系统间的进程通讯。方法很多,最简单的办法就是通过IPC进行操作了。
这几天我一直在寻找这方面的资源,有所收获后,记载下来,收录归档罢。
'''

 * [http://remoted.sourceforge.net/]
RemontD是一个python的进程间解决方案,它可以让你的多个进程共享一个dictionary来进行交互操作。

 * [http://pyro.sourceforge.net]
则是一个类RMI的多台服务器远程过程调用的解决方案,但是它支持在本机调用时使用IPC进行操作。

 * [http://poshmodule.sourceforge.net/]
POSH的作者显然是一个线程的憎恨者,他为PyCon DC 2003贡献了POSH,它使得python的进程间可以共享数据。

 * [http://www.xs4all.nl/~walterj//python-ipc/]
 * [http://www.theory.org/~mac4/software/]
显然是两个python的IPC简单包装,你可能在不同的平台上要自己仔细试试了。在表面上,两者都说明自己支持Linux平台的。

 * [http://www.onlamp.com/pub/a/php/2004/05/13/shared_memory.html]
伟大的ONLAMP总是会给我惊喜,这是使用PHP来操作共享内存的一个非常好的文章,它甚至将IPC在unix下的使用也说的非常的明白了。

 * [http://gigue.peabody.jhu.edu/~mdboom/omi/source/shm_source/shm.html]
这是一个在两年前就看到的一个python操作共享内存的实现,如果必须从头做起,相信这个原始的代码,可以成为一个很好的参考。
 * PyCourse --from:: [http://blog.huangdong.com] (即将成为历史的HD的个人blog,大家默哀) :)
Line 153: Line 255:

== 使用 WinAPI 的例子 ==
 * /PyWinApi -- 简单范例

== 在函数中确定其调用者 ! ==
 * AlbertLee
 * /PyCallParent

== Python哲学--内省的威力 ==
 * AlbertLee
 * [http://python.cn/pipermail/python-chinese/2004-August/004091.html Xie Yanbo] 引发
 * http://www.python.org/pics/batteries-included.jpg
 * '''Remember, Python comes with batteries included!'''
 * PyBatteriesIncluded -- 使用内省的功能,获得丰富的信息

收集Python 各种方面的技巧片段! -- Zoom.Quiet [DateTime(2004-08-09T23:28:59Z)]

TableOfContents

各种实用代码片段

提取网页中的超链接

   1 r='<a(?:(?:\\s*.*?\\s)|(?:\\s+))href=(?P<url>\S*?)(?:(?:\\s.*>)|(?:>)).*?</a>'
   2 compile(r).findall(a)
  • 这个是hoxide和天成讨论出来的方法,用来提取网页中的超链接.

解决在 Python 中登录网站的问题

刚刚看了xyb的代码,有点启发。 
写了一小段试了以下,可以登录了。呵呵。 
import httplib 
import urllib 
user=? 
pwd=? 
params=urllib.urlencode({"Loginname":user,"Loginpass":pwd,"firstlogin":1,"option":"登入论坛"}) 
headers={"Accept":"text/html","User-Agent":"IE","Content-Type":"application/x-www-form-urlencoded"} 
website="www.linuxforum.net" 
path="/forum/start_page.php" 
conn=httplib.HTTPConnection(website) 
conn.request("POST",path,params,headers) 
r=conn.getresponse() 
print r.status,r.reason 
data=r.read() 
print data 
conn.close() 

不知从form submit数据和直接提交request有些什么区别? 

浮点数的输出格式

>>> a=6200-6199.997841
>>> a
0.0021589999996649567
>>> print "%f"%a
0.002159
>>> import fpformat
>>> fpformat.fix(a, 6)
'0.002159'
>>> print fpformat.fix(a, 6)
0.002159
>>> print "%.6f"%a
0.002159
>>> print "%.7f"%a
0.0021590
>>> print "%.10f"%a
0.0021590000
>>> print "%.5f"%a
0.00216

怎么下载网络上的一张图片到本地

>知道了一张图片的URL >比如http://www.yahoo.com/images/logo.gif >想将它下载到本地保存应该怎么实现?

   1 urllib.urlretrieve(url, filename)

---Limodou

使用locale判断本地语言及编码

from::[http://limodou.donews.net/limodou/posts/11510.aspx limodou的学习记录 ]

在支持unicode软件中,经常需要在不同的编码与unicode之间进行转换。

那么对于一个本地文件的处理,首先要将其内容读出来转换成unicode编码,在软件中处理完毕后,再保存为原来的编码。

如果我们不知道文件的确切编码方式,可以使用默认的编码方式。那么我们可以使用locale模块来判断默认编码方式。

>>>import locale
>>>print locale.getdefaultlocale()
('zh_CN', 'cp936')

可以看出,我的机器上默认语言是简体中文,编码是GBK。

__new__的使用

from: [http://www.linuxforum.net/forum/showflat.php?Cat=&Board=python&Number=487139&page=1&view=collapsed&sb=5&o=31&fpart= 中国Linux论坛 -rings]

new

new是python里object的方法。如果你要重载new,那么你需要继承object。 new是类方法。他不带self参数。 newinit是不一样的。initself参数。所以他是在对象已经被构造好了以后被调用的。而如果你要在对象构造的时候 做一些事情,那么就需要使用newnew的返回值必须是对象的实例。 new一般在 一些模式里非常有用。我们看一个例子。 这个例子是《thinking in python》里的一个Singleton例子

class OnlyOne(object): 
    class __OnlyOne: 
        def __init__(self): 
            self.val = None 
        def __str__(self): 
            return ′self′ + self.val 
            
        instance = None 
        def __new__(cls): # __new__ always a classmethod 
            if not OnlyOne.instance: 
            OnlyOne.instance = OnlyOne.__OnlyOne() 
            return OnlyOne.instance 
        def __getattr__(self, name): 
            return getattr(self.instance, name) 
        def __setattr__(self, name): 
            return setattr(self.instance, name) 

x = OnlyOne() 
x.val = 'sausage' 
print x 
y = OnlyOne() 
y.val = 'eggs' 
print y 
z = OnlyOne() 
z.val = 'spam' 
print z 
print x 
print y 

我们可以看到OnlyOne从object继承而来。

如果你不继承object,那么你的 new就不会在构造的时候来调用。

当x = OnlyOne()的时候,其实就是调用new(OnlyOne), 每次实例化OnlyOne 的时候都会调用。

因为他是类方法。

所以这段代码就是利用这个特性来实现Singleton的。

因为不管构造多少对象,都要调用new.

那么在OnlyOne里保持一个类的属性, instance.

他代表嵌套的_OnlyOne的实例。

所以,对于他,我们只构造一次。

  • 以后每次构造的时候都是 直接返回这个实例的。

所以,在这里, x,y,z 都是同一个实例。

这个方法和典型的用C++ 来实现 Singleton的道理是一样的。

traceback 的处理

from::[http://www.donews.net/limodou/archive/2004/07/09/40045.aspx Limodou的学习记录]

trackback在 Python 中非常有用,它可以显示出现异常(Exception)时代码执行栈的情况。 但当我们捕捉异常,一般是自已的出错处理,因此代码执行栈的信息就看不到了,如果还想显 示的话,就要用到traceback模块了。

这里只是简单的对traceback模块的介绍,不是一个完整的说明,而且只是满足我个人的要求, 更详细的还是要看文档。

打印完整的traceback

让我们先看一个traceback的显示:

>>> 1/0

Traceback (most recent call last):
  File "", line 1, in -toplevel-
    1/0
ZeroDivisionError: integer division or modulo by zero

可以看出 Python 缺省显示的traceback有一个头:第一行,出错详细位置:第二、三行, 异常信息:第四行。也就是说分为三部分,而在traceback可以分别对这三部分进行处理。 不过我更关心完整的显示。

在traceback中提供了print_exc([limit[, file]])函数可以打印出与上面一样的效果。 limit参数是限定代码执行栈的条数,file参数可以将traceback信息输出到文件对象中。缺省的话是输出到错误输出中。举例:

>>> try:
    1/0
except:
    traceback.print_exc()
 
Traceback (most recent call last):
  File "", line 2, in ?
ZeroDivisionError: integer division or modulo by zero

当出现异常sys.exc_info()函数会返回与异常相关的信息。如:

>>> try:
    1/0
except:
    sys.exc_info()

(<class exceptions.ZeroDivisionError at 0x00BF4CC0>, 
<exceptions.ZeroDivisionError instance at 0x00E29DC8>, 
<traceback object at 0x00E29DF0>)

sys.exc_info()返回一个tuple,异常类,异常实例,和traceback。

print_exc()是直接输出了,如果我们想得到它的内容,如何做?使用 format_exception(type, value, tb [,limit]),type, value, tb分别对应 sys.exc_info()对应的三个值。如:

>>> try:
    1/0
except:
    type, value, tb = sys.exc_info()
 print traceback.format_exception(type, value, tb)

['Traceback (most recent call last):\n', '  File "", line 2, in ?\n', 
'ZeroDivisionError: integer division or modulo by zero\n']

这样,我们知道了format_exception返回一个字符串列表,这样我们就可以将其应用到我们的程序中了。

Python多进程处理之参考大全

* PyCourse --from

[http://blog.huangdong.com] (即将成为历史的HD的个人blog,大家默哀) :)

将你的Python脚本转换为Windows exe程序

from:: [http://blog.huangdong.com] (即将成为历史的HD的个人blog,大家默哀) :)

将Python的脚本变为一个可以执行的Windows exe程序可能的好处会说出很多,我最喜欢的则是它会让你写的程序更像是一个“程序”罢。但是,凡事有利就有弊,这样必然会让python的一些好处没有了。

你可以从这里找到[http://starship.python.net/crew/theller/py2exe/ py2exe]的相关信息,可以在这里下载到[http://prdownloads.sourceforge.net/py2exe/py2exe-0.4.2.win32-py2.3.exe?download py2exe-0.4.2.win32-py2.3.exe]安装包。 但是它的使用也还是比较麻烦的,需要你自己手工的写一个小的脚本,就像这样:

   1 # setup.py
   2 from distutils.core import setup
   3 import py2exe
   4 
   5 setup(name="myscript",
   6 scripts=["myscript.py"],
   7 )

再通过python的执行:

python setup.py py2exe

来使用。更多的信息上它的网站看罢。

使用 WinAPI 的例子

在函数中确定其调用者 !

Python哲学--内省的威力

PyTips (last edited 2009-12-25 07:08:33 by localhost)