将python中的字符串的某些字符转化为特定字符是经常用到string库中的maketrans()函数,以及translate()函数。 但是这两个函数比较抽象: maketrans函数产生的对象是一个表,这个数据结构对初学者并不友好。 tranlate(table, deleteValue)函数所需的第一个参数是个表结构,也就是maketrans的返回值,deleteValue是所要删除的字符。这第二个参数很别扭:一个translate函数,有时候还能删除某些字符。 而且使用过程中,往往两个函数是在一起使用的,不如直接把合成为一个函数,更加方便。
在使用translator的过程中,我们经常需要四个参数:源字符串,目标字符串,两者一一对应,要保留的字符,要删除的字符。所以,直接以这四个参数为输入建立新的函数:
import string
def translator(origin='',target='',delete='',keep=''):
"""
keep is primer than delete
but keep without chars in delete
"""
if len(target) == 1:
target *= len(origin)
assert(len(target)==len(origin))
if keep != '':
allchars = string.maketrans('','')
keep = keep.translate(allchars,delete)
delete = allchars.translate(allchars,keep)
trans = string.maketrans(origin,target)
def translate(sss):
return sss.translate(trans,delete)
return translate
此时的translator函数需要我们先构造函数,然后再调用返回的函数。
比如
>>>trans = translator(delete='abcd',keep='cdef')
>>>trans('abcdefgll')
'ef'
应当注意delete与keep之间的关系。
>>>digit2hash = translator(origin = string.digits,target='@')
>>>digit2hash('myjiayan: 368-346-290')
'myjiayan: @@@-@@@-@@@'
这就是还算不错的translator函数。