一、背景
在一些敏感数据中,我们需要进行一个数据关系的映射保存我们的的数据不会被进行抓去,或者提高抓取的难度
或者我们对一些数据进行替换,比如: qq号、手机号均换成*****格式等
二、maketrans、translate 替换表
- maketrans返回表示该字符的Unicode码点的整数值, 同
ord()
intab = 'abcdefghuj' # 大写字母 outtab = '1234567890' trantab = str.maketrans(intab, outtab) print(trantab) # 字符映射表识别字符串 { 97: 49, 98: 50, 99: 51, 100: 52, 101: 53, 102: 54, 103: 55, 104: 56, 117: 57, 106: 48} 底层利用ord() print(f"{ord('a')}: {ord('1')}") 97: 49
- translate 将字符映射表替换字符串
trantab = { 97: 49, 98: 50, 99: 51, 100: 52, 101: 53, 102: 54, 103: 55, 104: 56, 117: 57, 106: 48} string_to_translate = "life is short, i use python" translated_string = string_to_translate.translate(trantab) print(translated_string) li65 is s8ort, i 9s5 pyt8on
- 再次替换回原始字符串
reversed_trantab = str.maketrans(outtab, intab) # 先out 后in 与上个相反 translated_string = 'li65 is s8ort, i 9s5 pyt8on' reversed_translated_string = translated_string.translate(reversed_trantab) print(reversed_translated_string)
三、整理字符串输入
user_input = "This\nstring has\tsome whitespaces...\r\n"
character_map = {
ord('\n') : ' ',
ord('\t') : ' ',
ord('\r') : None
}
user_input.translate(character_map) # This string has some whitespaces...
到空格符\ n和\ t都被替换成了单个空格,\ r都被删掉
更进一步,使用unicodedata程序包生成大型重映射表,并使用其中的combining()进行生成和映射
四、其它用法 str.maketrans、bytes.maketrans、translate、maketrans方法
stanslate()方法,可以同时删除多种不同字符
bytearray.maketrans()、bytes.maketrans()、str.maketrans(), translate()
-
str.maketrans(a, b)
参数1文中字符, 参数2替换成字符s = 'abc2222xyz' a = str.maketrans('2', '4') print(s.translate(a)) abc4444xyz
-
bytes.maketrans()
并转下码s = b'123dddddxyz' a = bytes.maketrans(b'123', b'ABC') n = s.translate(a) print(n.decode() ABCdddddxyz
-
删除字符串
translate(),
bytes类型s = '123dddddxyz' b = s.encode() c = b.translate(None, b'123xyz') print(c.decode()) ddddd
-
替换字符串的同时删除字符串
s = b'123\txyrz\r' b = bytes.maketrans(b'123', b'ABC') ns = s.translate(b, b'\t\r') print(ns.decode()) ABCxyrz
unicodedata
有机会补上