optimization

Alex alex at somewhere.round.here
Tue Jul 6 19:17:39 EDT 1999


How does this look?
Alex.

import re, string

class dictionary_parser:
    def __init__ (self, file):
        self.file = file
        self.dict = {}
        self.parse_file ()
    def parse_file (self):
        lines = self.file.readlines ()
        multiline_delimiters = filter (re.compile ('\.').match, lines)
        for delimiter_index in range (0,len (multiline_delimiters),2):
            delimiter = multiline_delimiters [delimiter_index]
            assert delimiter==multiline_delimiters[delimiter_index+1]
            key = delimiter[1:]
            assert not self.dict.has_key (key)
            start = lines.index (delimiter)
            prefix = lines [:start]
            self.parse_single_line_entries (prefix)
            lines = lines [start+1:]
            end = lines.index (delimiter)
            # Check there's no single-line key in the multi-line value
            for line in lines [:end]: assert not re.search (':', line)
            self.dict [key] = string.join (lines[:end-1], '')
        self.parse_single_line_entries (lines [end+1:])
    def parse_single_line_entries (self, lines):
        single_line_pairs = filter (re.compile (':').search, lines)
        for pair in single_line_pairs:
            (key, value) = string.split (pair, ':', 1)
            assert not self.dict.has_key (key)
            self.dict[key] = value

if __name__ == '__main__':
    class file:
        contents = ['Key: one line value\n',
                    '.KEY\n',
                    'multiline value\n',
                    'multiline value\n',
                    'multiline value\n',
                    'multiline value\n',
                    '.KEY\n',
                    'Other Key: one line value\n']
        def readlines (self):
            return file.contents
    print dictionary_parser (file ()).dict




More information about the Python-list mailing list