string.translate函数中的“table”是什么意思?

时间:2014-01-10 07:57:44

标签: python string python-2.7

通过string.translate函数说明:

  

删除deletechars中的所有字符(如果存在),然后使用table翻译字符,该表必须是256个字符的字符串,为每个字符值提供翻译,并按其序号索引。如果table为None,则仅执行字符删除步骤。

  • table 在这里意味着什么?可以是包含映射的dict吗?
  • “必须是256个字符的字符串”是什么意思?
  • 可以手动制作,还是通过自定义函数代替string.maketrans

我尝试使用该功能(以下尝试)只是为了看它是如何工作的,但却无法成功使用它。

>>> "abcabc".translate("abcabc",{ord("a"): "d", ord("c"): "x"})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: translation table must be 256 characters long
>>> "abcabc".translate({ord("a"): ord("d"), ord("c"): ord("x")}, "b")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: expected a character buffer object

>>> "abc".translate({"a": "d", "c": "x"}, ["b"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: expected a character buffer object

我在这里缺少什么?

3 个答案:

答案 0 :(得分:21)

这取决于您使用的Python版本。

在Python 2.x中。该表是256个字符的字符串。它可以使用string.maketrans

创建
>>> import string
>>> tbl = string.maketrans('ac', 'dx')
>>> "abcabc".translate(tbl)
'dbxdbx'

在Python 3.x中,表是将unicode序列映射到unicode字符。

>>> "abcabc".translate({ord('a'): 'd', ord('c'): 'x'})
'dbxdbx'

答案 1 :(得分:10)

table必须是256个字符的字符串; str.translate()方法使用此表将字节值(0到255之间的数字)映射到新字符;例如任何字符'a'(具有整数值97的字节)将替换为表中的第98个字符。

你真的想要引用所有这些str.translate() documentation而不是string.translate()函数;后一种文件并不完整。

您可以使用string.maketrans功能构建一个;你给它只是你要替换的字符替换这些字符;对于你的例子,那是:

>>> import string
>>> table = string.maketrans('ac', 'cx')
>>> len(table)
256
>>> table[97]
'c'
>>> 'abcabc'.translate(table, 'b')
'cxcx'

第二个参数也应该是一个字符串。

您似乎已阅读 unicode.translate() 方法的文档;行为改变了,你确实必须传入unicode.translate()的字典。由于Python 2 unicode类型是Python 3中的str类型,因此您也可以在Python 3中使用str.translate()(其中bytes.translate()与上述行为相匹配)。

答案 2 :(得分:0)

翻译文本,不使用字典{ordinal:char},而是使用字典{char:char}(例如{&#39; a&#39;:&#39; X&#39;,&#39; J&#39;:&#39; y&#39;,...}:

text.translate({ord(k):dictionary[k] for k in dictionary})