maketrans是与translate配套使用的字符串函数,通过映射的方式返回内容。
目录
str.maketrans()
str.translate()
最后我们拿一个例子来具体说明:
str.maketrans()
看看官方的解释:
返回可用于str.translate()的转换表。
如果只有一个参数,则它必须是映射Unicode的字典,序号(整数)或字符到Unicode序号、字符串或None。然后,字符键将转换为序数。
如果有两个参数,则它们必须是长度相等的字符串,并且在生成的字典中,x中的每个字符都将映射到字符在y中的相同位置。
如果有第三个参数,则必须是字符串,其字符将在结果中映射为“None”。
三种方法构建翻译表:
>>> table1 = {ord('1'): ord('a'), ord('2'): ord('b')}
>>> table1
{49: 97, 50: 98}
>>> table2 = str.maketrans({'1': 'a', '2': 'b'})
>>> table2
{49: 'a', 50: 'b'}
>>> table3 = str.maketrans('12', 'ab')
>>> table3
{49: 97, 50: 98}
>>> table4 = str.maketrans('12', 'ab', '中文')
>>> table4
{49: 97, 50: 98, 20013: None, 25991: None}
str.translate()
使用给定的翻译表替换字符串中的每个字符。
转换表,它必须是Unicode序数到Unicode序数、字符串或None。
该表必须通过_ugetItem _;实现查找/索引,例如:字典或列表。
如果此操作引发LookupError,则该字符为保持原样。将删除映射到“None”的字符。
使用上一节生成的 4
张翻译表进行翻译:
>>> '123中文'.translate(table1)
'ab3中文'
>>> '123中文'.translate(table2)
'ab3中文'
>>> '123中文'.translate(table3)
'ab3中文'
>>> '123中文'.translate(table4)
'ab3'
最后我们拿一个例子来具体说明:
黑客语(Leet)是从网络发展起来的一种文字书写方式。通常将英语中的字母替换为数字和特殊符号。这种方式被很多黑客组织所使用。
由于具有隐密性,所以它也广泛被用于密码中。使用Leet书写的密码,不会增加密码记忆的复杂度,但却可以提高密码的强度。
常见的转化规律有,5替换s,3替换e,4替换a,0替换o,1替换i等。例如,cats使用Leet书写,就变为c475。
一个纯字母的密码就转化为字母、数字、特殊符号构成的复杂密码了。
table = ' '.maketrans(before, after),这条语句可以创建映射表,str.translate(table)语句可以将table中的字符按映射表中的顺序进行替换。
替换表如下:
0 1 3 4 5 6 7
o i e a s g t
写一个程序,用于破解一个加密的字符串。M4k3 G006l3 Y0ur H0m3p463!
str1 = "M4k3 G006l3 Y0ur H0m3p463!"
before = '0134567'
after = 'oieasgt'
table = ''.maketrans(before, after) #创建映射表
print(str1.translate(table))
输出: