Para este caso, no hay necesidad de maketrans
, ya sea para cadenas de bytes o cadenas Unicode:
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> delete_chars=''.join(chr(i) for i in xrange(32))
>>> '\x00abc\x01def\x1fg'.translate(None,delete_chars)
'abcdefg'
o:
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> delete_chars = dict.fromkeys(range(32))
>>> u'\x00abc\x01def\x1fg'.translate(delete_chars)
u'abcdefg'
o incluso en Python 3:
Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> delete_chars = dict.fromkeys(range(32))
>>> '\x00abc\x01def\x1fg'.translate(delete_chars)
'abcdefg'
Ver help(str.translate)
y help(unicode.translate)
(en Python2) para más detalles.
Para aquellos que pueden estar intentando algo como el segundo ejemplo ... si obtiene el error 'TypeError: expected a character buffer object', podría significar que la cadena que está tratando de traducir no es unicode. (Sin duda esto es obvio para Mark, pero no para los noobs como yo). – LarsH