Layout in Python 2.6

I have this nice little method for removing control characters from a string. Unfortunately, it does not work in Python 2.6 (only in Python 3.1). It states:

mpa = str.maketrans(dict.fromkeys(control_chars)) 

AttributeError: object type 'str' does not have attribute 'maketrans'

 def removeControlCharacters(line): control_chars = (chr(i) for i in range(32)) mpa = str.maketrans(dict.fromkeys(control_chars)) return line.translate(mpa) 

How can this be rewritten?

+8
python
source share
2 answers

For this instance, there is no need for maketrans for byte strings or Unicode strings:

 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' 

or

 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' 

or even in 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' 

See help(str.translate) and help(unicode.translate) (in Python2) for more details.

+8
source share

In Python 2.6, maketrans resides in a string module . Same thing with Python 2.7.

So, instead of str.maketrans you should first import string , and then use string.maketrans .

+14
source share

All Articles