[Python-talk] PySIG report, 27 Jan 2011
Lloyd Kvam
python at venix.com
Sat Jan 29 11:03:06 EST 2011
On Fri, 2011-01-28 at 20:54 -0500, Bill Sconce wrote:
> One of our membership is introducing himself to Python by discovering
> for himself how to use it to clean up a name-and-address database.
An all too common sort of problem. The Python re (regular expression)
module provides the sub method for making string substitutions.
http://docs.python.org/library/re.html#re.sub
The key thing to note is that the repl parameter does not have to be a
string. It can be a function!
I wrote a Converter class that takes in a dictionary of string
conversions. The "old" strings are assumed to be words. This allows
you to have a dictionary like dict(
i = 'I',
in = 'Out',
)
where some of the strings are contained in others. I needed that for
converting field names. The class combines all of the "old" strings
into a regular expression pattern and constructs the repl function to be
used by the pattern's sub method.
Then the call to pattern.sub is packaged using functools.partial and
named _cvt. A separate method, convert, documents the remaining free
parameters for the sub call. I think it makes things less mysterious.
Finally convert is assigned to __call__ so that Converter objects can be
called directly.
The last time I used this was to help my daughter with late changes for
the Ethics Bowl held last Fall at Dartmouth.
http://www.dartmouth.edu/~ethics/nereb/index.html
The scheduling program uses place holders for rooms and team names. She
needed to convert the generated schedule (ethics-bowl.txt) into
something meaningful for the participants.
<ethics-bowl.txt python fix-ethics-matches.py
did the trick.
As you can tell from the length of this email, I was pretty tickled when
I realized how nicely this kind of logic could be packaged.
--
Lloyd Kvam
Venix Corp
DLSLUG/GNHLUG library
http://dlslug.org/library.html
http://www.librarything.com/catalog/dlslug
http://www.librarything.com/catalog/dlslug&sort=stamp
http://www.librarything.com/rss/recent/dlslug
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fix-ethics-matches.py
Type: text/x-python
Size: 1310 bytes
Desc: not available
Url : http://mail.gnhlug.org/mailman/private/gnhlug-discuss/attachments/20110129/6810d07f/attachment.py
-------------- next part --------------
A non-text attachment was scrubbed...
Name: converter.py
Type: text/x-python
Size: 1298 bytes
Desc: not available
Url : http://mail.gnhlug.org/mailman/private/gnhlug-discuss/attachments/20110129/6810d07f/attachment-0001.py
-------------- next part --------------
Panel Round One Round Two Round Three
------- ------- ------- -------
A 2 vs 6 3 vs 16 9 vs 19
B 3 vs 17 8 vs 11 10 vs 20
C 4 vs 9 10 vs 18 11 vs 14
D 5 vs 10 9 vs 17 2 vs 12
E 7 vs 11 12 vs 13 1 vs 6
F 12 vs 15 2 vs 14 3 vs 13
G 14 vs 16 4 vs 19 5 vs 18
H 18 vs 19 5 vs 20 7 vs 17
I 8 vs 20 1 vs 7 15 vs 16
J 1 vs 13 6 vs 15 4 vs 8
Here are the new instructions for each team:
Team # Round One Round Two Round Three
Panel Opponent Panel Opponent Panel Opponent
------ ----- ------ ----- ------ ----- ------
1 J--13 I--7 E--6
2 A--6 F--14 D--12
3 B--17 A--16 F--13
4 C--9 G--19 J--8
5 D--10 H--20 G--18
6 A--2 J--15 E--1
7 E--11 I--1 H--17
8 I--20 B--11 J--4
9 C--4 D--17 A--19
10 D--5 C--18 B--20
11 E--7 B--8 C--14
12 F--15 E--13 D--2
13 J--1 E--12 F--3
14 G--16 F--2 C--11
15 F--12 J--6 I--16
16 G--14 A--3 I--15
17 B--3 D--9 H--7
18 H--19 C--10 G--5
19 H--18 G--4 A--9
20 I--8 H--5 B--10
More information about the gnhlug-discuss
mailing list