python 之 maketrans、translate应用场景、底层原理、使用方式

一、背景

在一些敏感数据中,我们需要进行一个数据关系的映射保存我们的的数据不会被进行抓去,或者提高抓取的难度
或者我们对一些数据进行替换,比如: 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 有机会补上

猜你喜欢

转载自blog.csdn.net/a6864657/article/details/131642808