標籤:string python
將python中的字串的某些字元轉化為特定字元是經常用到string庫中的maketrans()函數,以及translate()函數。 但是這兩個函數比較抽象: maketrans函數產生的對象是一個表,這個資料結構對初學者並不友好。 tranlate(table, deleteValue)函數所需的第一個參數是個表結構,也就是maketrans的返回值,deleteValue是所要刪除的字元。這第二個參數很彆扭:一個translate函數,有時候還能刪除某些字元。 而且使用過程中,往往兩個函數是在一起使用的,不如直接把合成為一個函數,更加方便。
在使用translator的過程中,我們經常需要四個參數:源字串,目標字串,兩者一一對應,要保留的字元,要刪除的字元。所以,直接以這四個參數為輸入建立新的函數:
import stringdef 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: @@@[email protected]@@[email protected]@@‘
這就是還算不錯的translator函數。
[筆記] 建立python中的字串translator