Python通過(guò)正則表達(dá)式選取callback的方法
本文實(shí)例講述了Python通過(guò)正則表達(dá)式選取callback的方法。分享給大家供大家參考。具體如下:
最近在瞎想怎么通過(guò)xpath去精確抓取文章的正文,跟parselets類似的想法,只不過(guò)更簡(jiǎn)單。
代碼設(shè)計(jì)上采用正則表達(dá)式匹配URL,再選擇callback handler的方式,主要參考web.py的分發(fā)器(Dispatcher)。
當(dāng)然,這個(gè)實(shí)現(xiàn)比較老土一些,全部用function的方式回調(diào),沒(méi)有用類。
#!/bin/env python
import re, sys
# Define parser first.
def baidu(username):
# Business logic
return "Using parser Baidu. and the user's name is: %s." % username
def qzone(uin):
# Business logic
return "Using parser Qzone, and the user's QQ is: %s." % uin
# From web.py
def group(seq, size):#{{{
"""
Returns an iterator over a series of lists of length size from iterable.
>>> list(group([1,2,3,4], 2))
[[1, 2], [3, 4]]
>>> list(group([1,2,3,4,5], 2))
[[1, 2], [3, 4], [5]]
"""
def take(seq, n):
for i in xrange(n):
yield seq.next()
if not hasattr(seq, 'next'):
seq = iter(seq)
while True:
x = list(take(seq, size))
if x:
yield x
else:
break
#}}}
def parser_init(url,mapping):
for pat, what in group(mapping,2):
result = re.compile('^' + pat + '$').match(url)
if result:
return what, [x for x in result.groups()]
return None, None
if __name__ == '__main__':
mapping = (
'http://(?:hi|space).baidu.com/([^/]+)(?:/.*)?','baidu',
'http://(\d+).qzone.qq.com(?:/.*)?','qzone',
)
(func, args) = parser_init(sys.argv[1],mapping)
if func:
callback = func
if func in globals():
callback = globals()[func]
if callable(callback):
print callback(*args)
else:
print 'No parser found.';
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python如何利用plt.legend()添加圖例代碼示例
用python的matplotlib畫圖時(shí),往往需要加圖例說(shuō)明,下面這篇文章主要給大家介紹了關(guān)于python如何利用plt.legend()添加圖例的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
Python實(shí)現(xiàn)文件按照日期命名的方法
這篇文章主要介紹了Python實(shí)現(xiàn)文件按照日期命名的方法,涉及Python針對(duì)文件的遍歷、讀寫及時(shí)間操作相關(guān)技巧,需要的朋友可以參考下2015-07-07
使用Python實(shí)現(xiàn)從各個(gè)子文件夾中復(fù)制指定文件的方法
今天小編就為大家分享一篇使用Python實(shí)現(xiàn)從各個(gè)子文件夾中復(fù)制指定文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
python opencv 實(shí)現(xiàn)對(duì)圖像邊緣擴(kuò)充
今天小編就為大家分享一篇python opencv 實(shí)現(xiàn)對(duì)圖像邊緣擴(kuò)充,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python開(kāi)發(fā)圍棋游戲的實(shí)例代碼(實(shí)現(xiàn)全部功能)
圍棋是一種古老而復(fù)雜的策略棋類游戲,起源于中國(guó),已有超過(guò)2500年的歷史,本文介紹了如何用Python開(kāi)發(fā)一個(gè)簡(jiǎn)單的圍棋游戲,實(shí)例代碼涵蓋了游戲的基本規(guī)則、界面設(shè)計(jì)、棋盤實(shí)現(xiàn)、棋子管理、游戲邏輯等多個(gè)方面,通過(guò)逐步實(shí)現(xiàn)落子、吃子、判斷勝負(fù)等功能2024-12-12
pytest下的pytest.ini文件的配置項(xiàng)
這篇文章主要給大家介紹了pytest下的pytest.ini文件的配置項(xiàng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧,2017-10-10
TensorFlow Session使用的兩種方法小結(jié)
今天小編就為大家分享一篇TensorFlow Session使用的兩種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

