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