字典搜索的回调函数在python中生成

时间:2012-04-11 11:58:29

标签: python

我有一个现有的python脚本,除其他外,它根据正则表达式的字典检查文件。如果文件包含一个正则表达式,我会注意到已经打了一个字典,打印包含该文件的行并继续。很简单。

但是我现在想要为文件命中的每个RE建立一个不同的回调函数。我很困惑如何在long if / elseif块之外的python中实现这一点。这是一个应该在PERL中完成的情况吗? (这意味着我必须重新编写相当多的代码,因此首先不这样做的原因。)

我已经检查了这些(甚至帖子中的链接)可能的解决方法,但还没有看到任何可行的方法:

Replacements for switch statement in Python?

https://stackoverflow.com/questions/374239/why-doesnt-python-have-a-switch-statement

1 个答案:

答案 0 :(得分:4)

你可以这样做:

def callback1(line, regex_match):
   #do what you want

def callback2(line, regex_match):
   #do what you want... else


regex_dict = {
   "first_regex" : callback1,
   "second_regex" : callback2,
}

file_to_check = open("the_file")
for line in file_to_check:
    for regex, callback in regex_dict.iteritems():
        result = re.match(regex, line)
        if result:
           callback(line, result)
           break

然后,在每个正则表达式匹配中,您将调用与该行和正则表达式结果相关联的回调。