通过string.translate
函数说明:
删除deletechars中的所有字符(如果存在),然后使用table翻译字符,该表必须是256个字符的字符串,为每个字符值提供翻译,并按其序号索引。如果table为None,则仅执行字符删除步骤。
dict
吗?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
我在这里缺少什么?
答案 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})