使用Python进行字符翻译(如tr命令)

时间:2009-02-17 06:33:07

标签: python

有没有办法使用python

进行字符翻译(有点像tr命令)

6 个答案:

答案 0 :(得分:38)

请参阅string.translate

import string
"abc".translate(string.maketrans("abc", "def")) # => "def"

请注意doc对unicode字符串翻译中细微之处的评论。

修改:由于tr更高级,因此请考虑使用re.sub

答案 1 :(得分:22)

如果您正在使用python3,则翻译不那么详细:

>>> 'abc'.translate(str.maketrans('ac','xy'))
'xby'

啊......而且还相当于tr -d

>>> "abc".translate(str.maketrans('','','b'))
'ac' 

对于使用python2.x的tr -d,使用另一个参数来转换函数:

>>> "abc".translate(None, 'b')
'ac'

答案 2 :(得分:5)

我开发了python-tr,实现了tr算法。 我们来试试吧。

安装:

$ pip install python-tr

示例:

>>> from tr import tr
>>> tr('bn', 'cr', 'bunny')
'curry'
>>> tr('n', '', 'bunny', 'd')
'buy'
>>> tr('n', 'u', 'bunny', 'c')
'uunnu'
>>> tr('n', '', 'bunny', 's')
'buny'
>>> tr('bn', '', 'bunny', 'cd')
'bnn'
>>> tr('bn', 'cr', 'bunny', 'cs')
'brnnr'
>>> tr('bn', 'cr', 'bunny', 'ds')
'uy'

答案 3 :(得分:1)

在Python 2中,unicode.translate()接受普通映射,即。没有必要导入任何东西:

>>> u'abc+-'.translate({ord('+'): u'-', ord('-'): u'+', ord('b'): None})
u'ac-+'

translate()方法对于交换字符特别有用(上面的' +'和' - '上面的内容),这些方法不能用{来完成{1}},使用replace()也不是非常简单。

但是,我必须承认,重复使用re.sub()并不会使代码看起来很整洁。

答案 4 :(得分:0)

我们先制作一张地图,然后逐个字母翻译。当使用get作为字典时,第二个参数指定如果找不到任何内容将返回什么。

可以轻松地将其转移到单独的功能。通常应该非常有效率。

def transy(strin, old, new):
  assert len(old)==len(new)
  trans = dict(zip(list(old),list(new)))
  res =  "".join([trans.get(i,i) for i in strin])
  return res

>>> transy("abcd", "abc", "xyz")
'xyzd'

答案 5 :(得分:-4)

更简单的方法可能是使用替换。 e.g。

 "abc".replace("abc", "def")
'def'

无需导入任何内容。适用于Python 2.x