【发布时间】:2010-11-22 09:12:30
【问题描述】:
我有以下代码:
import string
def translate_non_alphanumerics(to_translate, translate_to='_'):
not_letters_or_digits = u'!"#%\'()*+,-./:;<=>?@[\]^_`{|}~'
translate_table = string.maketrans(not_letters_or_digits,
translate_to
*len(not_letters_or_digits))
return to_translate.translate(translate_table)
这对非 unicode 字符串非常有效:
>>> translate_non_alphanumerics('<foo>!')
'_foo__'
但 unicode 字符串失败:
>>> translate_non_alphanumerics(u'<foo>!')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in translate_non_alphanumerics
TypeError: character mapping must return integer, None or unicode
对于 str.translate() 方法,我无法理解 Python 2.6.2 docs 中关于“Unicode 对象”的段落。
我如何使这项工作适用于 Unicode 字符串?
【问题讨论】:
-
在实际代码中最好使用
import string; string.punctuation而不是硬编码not_letters_or_digits。我明白了,你宁愿明确一点。