2011-01-31 19 views
8

私は、文字列から制御文字を削除するこの素敵な方法があります。 Unfortunatelly、Python 2.6では動作しません(Python 3.1のみ)。それは述べて:Python 2.6のMaketrans

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

は、バイト文字列またはUnicode文字列のいずれかのためにmaketransは必要ありません。

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の3の

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.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

2番目の例のようなものを試している人には、エラー 'TypeError:expected character buffer object'を受け取った場合、翻訳しようとしている文字列がユニコードではない可能性があります。 (間違いなくこれはMarkにとっては明らかですが、私のような奴隷には当てはまりません)。 – LarsH

14

Python 2.6では、maketransthe string moduleです。 Python 2.7と同じです。

str.maketransの代わりに、最初にimport stringとし、string.maketransを使用します。このインスタンスの

関連する問題