将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
比如
>>>trans = translator(delete=‘abcd‘,keep=‘cdef‘)
>>>trans(‘abcdefgll‘)
‘ef‘
应当注意delete与keep之间的关系。
>>>digit2hash = translator(origin = string.digits,target=‘@‘)
>>>digit2hash(‘myjiayan: 368-346-290‘)
‘myjiayan: @@@-@@@-@@@‘
这就是还算不错的translator函数。
原文地址:http://blog.csdn.net/myjiayan/article/details/46136929