• maktrans和translate详解


    str.marktrans方法:生成一个dict表。对应翻译表(asc码格式),
    如:t = str.maketrans(‘abcdefghi’, ‘123456789’,“abfgjk”)
    返回:{97: None, 98: None, 99: 51, 100: 52, 101: 53, 102: None, 103: None, 104: 56, 105: 57, 106: None, 107: None},
    说明:比如第一个参数里面的第一个字符 asc码97的字符(a)对应为None(本来应该对应于第二个参数中的数字1,但是由于被第三个参数过滤了,所以对应成为了None,而第一个参数中的第三个字符asc码99的字符(c)对应的为第二个参数里面的数字3(数字3的asc码是51)…

    translate方法:就是把原始str中每个字符用对照翻译表中字符对应替换掉,对应None的就表示删除
    def test_maketrans_translate():
    # maketrans方法返回类型:字典,基本功能就是将字符串每个字符转为asc码
    # 如果提供一个参数:这个参数就必须是字典,方法将字典的key转换成asc码后返回。
    a=str.maketrans({1:'b',3:'d'})
    print (type(a),a) #< class 'dict'> {1: 'b', 3: 'd'}
    a = str.maketrans({'1': 'b', '3': 'd'})
    print(type(a), a) # <class 'dict'> {49: 'b', 51: 'd'}

    # 如果提供二个参数:两个参数都必须是字符串,而且要长度一样。
    b=str.maketrans('abcdefg','1234567')
    print(type(b),b) # <class 'dict'> {97: 49, 98: 50, 99: 51, 100: 52, 101: 53, 102: 54, 103: 55}
    # b = str.maketrans('abcdefg', '12345')
    # print(type(b), b) # 报错,the first two maketrans arguments must have equal length(前两个参数必须一样长)

    # 如果提供三个参数:
    # 第一、二个参数和上面一样
    # 第三个参数:需要设置为None的字符。
    # 网上多会说是过滤之类的,其实简单说就是:
    # 如果第一个参数中有第三个参数中的字符就忽略,然后将第三个参数中的所有字符直接对应为None
    # 通常使用这个参数都是为 提供给translate函数从某字符串中删除这个参数中包含的特定字符用。
    c = str.maketrans('abcdefghi', '123456789',"abfgjk")
    print("2=", type(c), c) # <class 'dict'> {97: None, 98: None, 99: 51, 100: 52, 101: 53, 102: None, 103: None, 104: 56, 105: 57, 106: None, 107: None}
    # 本来a、b、f、g 字符对应的是1、2,6,7,但是由于第三参数abfg 定义了这4个字符被忽略,因此结果中出现了97:None,98:None...102:None,103:None
    # 同时在第三个参数中"jk"还有两个字符,因此结果中还多出了 106: None, 107: None
    c= str.maketrans('ab', 'AB', "b")
    print("3=" ,type(c), c) # <class 'dict'> {97: 65, 98: None} # <class 'dict'> {97: 65, 98: None}

    # 下面演示 translate 方法
    # translate方法返回:字符串,实际就是把原始str中每个字符用对照表中字符对应替换,对照表中None的字符实际效果就是被删除了
    # str.translate(table[, deletechars]);
    # 参数:# table -- 对照翻译表,翻译表是通过maketrans方法转换而来。 # deletechars -- 字符串中要过滤的字符列表。
    import string
    s1 = "abcdefg"
    # 更换字符
    t1= str.maketrans('abc', 'ABC',) # 生成了一个对照翻译表,说明a换成A,b换成B...
    print("4 替换:"+ s1+"->",s1.translate(t1)) # abcdefg-> ABCdefg
    # 删除字符(实际就是生成 字符对应None的翻译表)
    t1=str.maketrans("","","abc") #实际生成了{97:None,98:None,99:None}的对应翻译表
    print("5 删除:"+ s1+"->",s1.translate(t1)) # 删除:abcdefg-> defg

    # 实战:删除句子中的标点
    s1 = "how old are you?I'm 10 years old." # 句子中有多个标点,需要去除
    # 第一步:生成需要删除标点对应None的翻译表,结果为:# <class 'dict'> {33: None, 34: None, 35: None, 36: None ...}
    t1=str.maketrans("","",string.punctuation) # string.punctuation含各种标点的字符串(实际就是字符串:!"#$%&'()*+,-./:;<=>?@[]^_`{|}~ ))
    # 第二步:删除句子中的标点
    print("原始句子:" + s1) # 原始句子:how old are you?I'm 10 years old.
    print("删除标点:" + s1.translate(t1) ) # 删除标点:how old are youIm 10 years old

    if __name__ == "__main__":
    test_maketrans_translate()
    ————————————————
    版权声明:本文为CSDN博主「不甜」的原创文章。
    原文链接:https://blog.csdn.net/zyself/article/details/90481639

  • 相关阅读:
    注解的作用(一)
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---13
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---12
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---11
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---7
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---10
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---6
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---5
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---4
    《Linux命令行与shell脚本编程大全 第3版》Linux命令行---3
  • 原文地址:https://www.cnblogs.com/Centwei/p/11498861.html
Copyright © 2020-2023  润新知