Hi experts, I've built a class for parsing a user-defined list of files and matching lines with a user-defined list of regular expressions. It looks like this:
<code> import re import glob class LineMatcher: """ Parses a list of text files, matching their lines with the given regular expressions and executing associated actions.""" def __init__(self): # List of file names to parse for matching. self.file_names = [] # Association of reg expressions to actions to execute when match. self.regexp_action = {} def go(self): for file_name in self.file_names: file = open(file_name) for line in file: for regexp, action in self.regexp_action.items(): match = regexp.match(line) if match: action(line, match.groupdict()) def add_files(self, file_pattern): self.file_names.extend(glob.glob(file_pattern)) def add_action(self, regexp_string, action): self.regexp_action[re.compile(regexp_string)] = action </code> But then, when I try to use my class using actions with "memory" it will fail: <code> import LineMatcher global count count = 0 def line_action(line, match_dictionary): count = count + 1 line_matcher = LineMatcher.LineMatcher() line_matcher.add_files('*') line_matcher.add_action(r'(?P<line>.*)', line_action) line_matcher.go() </code> The error is: <console> Traceback (most recent call last): File "Test.py", line 12, in ? line_matcher.go() File "LineMatcher.py", line 21, in go action(line, match.groupdict()) File "Test.py", line 7, in line_action count = count + 1 UnboundLocalError: local variable 'count' referenced before assignment </console> How would you do this? Regards, Tito -- http://mail.python.org/mailman/listinfo/python-list