Alex Martelli wrote: > Michael Spencer <[EMAIL PROTECTED]> wrote: >> >> Here, str.translate deletes the characters in its optional second argument. >> Note that this does not work with unicode strings. > > With unicode, you could do something strictly equivalent, as follows: > > nowhite = dict.fromkeys(ord(c) for c in string.whitespace) > > and then > > return a.translate(nowhite) == b.translate(nowhite) > > > Alex Interesting! But annoying to have to use unicode.translate differently from str.translate:
import string NULL = string.maketrans("","") WHITE = string.whitespace NO_WHITE_MAP = dict.fromkeys(ord(c) for c in WHITE) def compare(a,b): """Compare two basestrings, disregarding whitespace -> bool""" if isinstance(a, unicode): astrip = a.translate(NO_WHITE_MAP) else: astrip = a.translate(NULL, WHITE) if isinstance(b, unicode): bstrip = b.translate(NO_WHITE_MAP) else: bstrip = b.translate(NULL, WHITE) return astrip == bstrip In fact, now that you've pointed it out, I like the unicode.translate interface much better than str.translate(translation_table, deletechars = None). But it would also be nice if these interfaces were compatible. Perhaps str.translate could be extended to take a single mapping (optionally) as its argument: i.e., behavior like: def translate(self, table, deletechars=None): """S.translate(table [,deletechars]) -> string Return a copy of the string S, where all characters occurring in the optional argument deletechars are removed, and the remaining characters have been mapped through the given translation table, which must be either a string of length 256 or a map of str ordinals to str ordinals, strings or None. Unmapped characters are left untouched. Characters mapped to None are deleted.""" if hasattr(table, "keys"): if deletechars: raise ValueError, "Can't specify deletechars with a mapping table" table_map = table table = "" deletechars = "" for key in range(256): if key in table_map: val = table_map[key] if val is None: deletechars += chr(key) val = chr(key) if not isinstance(val, str): val = chr(val) else: val = chr(key) table += val return str.translate(self, table, deletechars) Michael -- http://mail.python.org/mailman/listinfo/python-list