Help, Search and Substitute
Greg Jorgensen
gregj at pobox.com
Sat Nov 4 04:22:23 EST 2000
> "Pete Shinners" <pete at visionart.com> wrote in message
> news:8tcp98$t79$1 at la-mail4.digilink.net...
> > I've got to write a search and replace type routine that
> > works on a template file. i have a dictionary with string
> > keys and values. i want parse a template file and replace
> > "{KEYNAME}" with the value of KEYNAME from my dictionary.
I just wrote something similar to do bulk mailings from templates and merge
files. My first version used re.sub but was too slow, but this technique is
fast enough:
# break the template into list of chunks that are either plain text or
{field_name}
rx = re.compile(r'(\{[a-zA-Z0-9_]+\})')
chunks = rx.split(template)
# values dict contains field_name: value entries, i.e.
values = {'NAME':'Greg', 'PHONE':'503-555-1212', ....}
# look at each chunk and change {field_name} to merged value
message = []
for s in chunks:
if s and s[0] == '{' and s[-1] == '}': # {field_name}
s = s[1:-1] # strip surrounding {...}
s = values.get(s, s) # get value of field_name, or field_name if
not in merge dict
message.append(s)
# put merged message back together
''.join(message) # bizarre join syntax
print message
--
My complete mailmerge program handles nested {...} and will recursively
process the message until all {FIELDS} are replaced; this allows {...} to
appear in the merge file as well as the template.
--
Greg Jorgensen
Deschooling Society
Portland, Oregon, USA
gregj at pobox.com
More information about the Python-list
mailing list