Python 中 maketrans 與 translate 的用法
maketrans 和 translate 函數(shù)是進(jìn)行字符串字符編碼的常用方法。首先看下兩個函數(shù)的簽名和用法實例
maketrans
string.maketrans(from, to)
translate
string.translate(s, table[, deletechars])
str.translate(table[, deletechars])
unicode.translate(table)
實例
import string
map = string.maketrans('123', 'abc')
s = "123345"
string.translate(s,map)
#'abcc45'
s.translate(string.maketrans('123', 'aaa'), '5')
#'aaaa4'
s.translate(map)
#'abcc45'
s.translate(string.maketrans('123', 'aaa'))
#'aaaa45'
在《Python CookBook》中有如下代碼
import string
def translator(from='', to='', delete='', keep=None):
if len(to) == 1:
to = to * len(from)
trans = string.maketrans(from, to)
if keep is not None:
allchars = string.maketrans('', '')
delete = allchars.translate(allchars, keep.translate(allchars,delete))
def translate(s):
return s.translate(trans, delete)
return translate
這是作者把使用字符串的 translate 方法的需求寫成的一個工廠閉包的形式,這樣可以簡單的創(chuàng)建并且使用它。
實例
digites_only = translator(keep=string.digits)
digites_only("Chris Perkins : 223-2346")
#'2232346'
digits_to_hash = translator(delete=string.digits)
digites_only("Chris Perkins : 223-2346")
#'Chris Perkins : -'
digits_to_hash = translator(from=string.digits, to='#')
digites_only("Chris Perkins : 223-2346")
#'Chris Perkins : ###-####'