有没有办法使用python
进行字符翻译(有点像tr命令)答案 0 :(得分:38)
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