2011-01-31 39 views
8

Tôi đã có phương pháp nhỏ đẹp này để loại bỏ các ký tự điều khiển khỏi một chuỗi. Unfortunatelly, nó không hoạt động trong Python 2.6 (chỉ trong Python 3.1). Nó nói:Maketrans bằng 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) 

Làm thế nào nó có thể được viết lại?

Trả lời

8

Đối với trường hợp này, không có nhu cầu maketrans cho một trong hai chuỗi byte hoặc các chuỗi 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' 

hay:

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' 

hoặc thậm chí bằng 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' 

Xem help(str.translate)help(unicode.translate) (bằng Python2) để biết chi tiết.

+1

Đối với những người có thể thử thứ gì đó giống như ví dụ thứ hai ... nếu bạn gặp lỗi 'TypeError: dự kiến ​​một đối tượng đệm ký tự', điều đó có nghĩa là chuỗi bạn đang cố dịch không phải là unicode. (Không nghi ngờ điều này là hiển nhiên đối với Mark, nhưng không noobs như tôi.) – LarsH

14

Trong Python 2.6, maketrans nằm trong the string module. Tương tự với Python 2.7.

Vì vậy, thay vì str.maketrans, trước tiên bạn cần import string và sau đó sử dụng string.maketrans.

Các vấn đề liên quan