查看string.translate
函数,该函数表示:
删除deletechars中的所有字符(如果存在),然后使用表转换字符,表必须是一个256个字符的字符串,给出每个字符值的转换,并按其序号编制索引。如果table为None,则只执行字符删除步骤。
dict
吗?我尝试使用这个函数(尝试如下),只是想看看它是如何工作的,但没有成功地使用它。
>>> "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
这里我漏掉了什么?
发布于 2014-01-10 16:04:19
这取决于您使用的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'
发布于 2014-01-10 16:05:14
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()
的字典。由于Python2中的unicode
类型是Python3中的str
类型,因此这也是您在Python3中使用str.translate()
的方式(其中bytes.translate()
与上述行为相匹配)。
发布于 2017-12-15 21:47:48
要翻译文本,不使用字典{序号: char},而使用字典{char: char} (例如{'a':'X','J':'y',...}:
text.translate({ord(k):dictionary[k] for k in dictionary})
https://stackoverflow.com/questions/21038891
复制相似问题