2011-01-31 5 views
8

У меня есть этот хороший небольшой метод для удаления управляющих символов из строки. К сожалению, он не работает в Python 2.6 (только в Python 3.1). В нем говорится:Maketrans in Python 2.6

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

AttributeError: type object 'str' has no 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) 

Как это может быть переписано?

ответ

8

Для этого, например, нет необходимости в maketrans либо для байтовых строк или строк 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' 

или:

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' 

или даже в 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' 

См. help(str.translate) и help(unicode.translate) (в Python2).

+1

Для тех, кто может попробовать что-то наподобие второго примера ... если вы получите ошибку 'TypeError: ожидается объект символьного буфера', это может означать, что строка, которую вы пытаетесь перевести, не является unicode. (Без сомнения, это очевидно для Марка, но не для noobs, подобных мне). – LarsH

14

В Python 2.6, maketrans находится в the string module. То же самое с Python 2.7.

Итак, вместо str.maketrans вы должны сначала import string, а затем использовать string.maketrans.