首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >string.translate函数中的“表”是什么意思?

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

Stack Overflow用户
提问于 2014-01-10 15:57:44
回答 3查看 32.6K关注 0票数 25

查看string.translate函数,该函数表示:

删除deletechars中的所有字符(如果存在),然后使用表转换字符,表必须是一个256个字符的字符串,给出每个字符值的转换,并按其序号编制索引。如果table为None,则只执行字符删除步骤。

  • 表在这里是什么意思?它可以是包含映射的dict吗?
  • “必须是256个字符的字符串”是什么意思?
  • 可以手动创建表,也可以通过自定义函数创建表,而不是使用自定义函数

我尝试使用这个函数(尝试如下),只是想看看它是如何工作的,但没有成功地使用它。

代码语言:javascript
复制
>>> "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
代码语言:javascript
复制
>>> "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

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

这里我漏掉了什么?

EN

回答 3

Stack Overflow用户

发布于 2014-01-10 16:04:19

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

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

代码语言:javascript
复制
>>> import string
>>> tbl = string.maketrans('ac', 'dx')
>>> "abcabc".translate(tbl)
'dbxdbx'

在Python 3.x中,该表是unicode序号到unicode字符的映射。

代码语言:javascript
复制
>>> "abcabc".translate({ord('a'): 'd', ord('c'): 'x'})
'dbxdbx'
票数 23
EN

Stack Overflow用户

发布于 2014-01-10 16:05:14

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

您确实希望引用str.translate() documentation,而不是string.translate()函数;后面的文档并不完整。

您可以使用string.maketrans函数构建一个;您只需将您想要替换的字符指定为替换这些字符的字符即可;对于您的示例,这是:

代码语言:javascript
复制
>>> 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()与上述行为相匹配)。

票数 10
EN

Stack Overflow用户

发布于 2017-12-15 21:47:48

要翻译文本,不使用字典{序号: char},而使用字典{char: char} (例如{'a':'X','J':'y',...}:

代码语言:javascript
复制
text.translate({ord(k):dictionary[k] for k in dictionary})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21038891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档