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))

输出:

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐