技术开发 频道

详解Python 3.1新变化之核心语言篇

  三、Maketrans函数

  利用maketrans()和translate()函数,我们可以使用一组字符来替换另一组字符。使用这一替换功能时,多少有点繁琐,因为它要求使用maketrans()函数(该函数的作用是把输入字符映射到输出字符)建立一个转换表,然后,再把这个转换表传递给translate()函数。当然,string模块仍然有它自己的maketrans()函数,不过Python 3.1不赞成使用它,而是赞赏使用单独的maketrans()函数来操作字节、字节数组和字符串。

  下面的例子演示了如何使用maketrans()和translate()函数处理字节对象。需要注意的是,用于字节的转换表具有256个表项(每一项对应于一个可能的字节),并且这个例子把大部分字节都映射到它们自身,只有1,2和3例外,因为它们分别映射到了4,5和6。如下所示:

  >>> tt = bytes.maketrans(b'123', b'456')

  
>>> len(tt)

  
256

  
>>> tt

  b
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\

  t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\

  x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\

  x1e\x1f !
"#$%&\'()*+,-./0456456789:;<=>

  ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]
^_`abcd

  efghijklmnopqrstuvwxyz{
|}~\x7f\x80\x81\

  x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\

  x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\

  x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\

  xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\

  xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\

  xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\

  xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\

  xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\

  xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\

  xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\

  xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\

  xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\

  xfa\xfb\xfc\xfd\xfe\xff
'

  建好转换表之后,我们只需把它传递给translate()函数即可,如下所示:

  >>> b'123456'.translate(tt)

  b
'456456'

  我们还可以传递其它的参数作为要删除的字符:

  >>> b'123456'.translate(tt, b'5')

  b
'45646'

  我们可以看到,原来的5已经从123456从删掉了,但是转换得到的5(请记住,我们的映射表将2转化为5)并没有删除。这说明,系统是先从原来的字符串中删除相应的字符,然后才进行的转换操作。

  字符串的转换稍微有些不同,字符串版本的maketrans函数返回的是一个字典:

  >>> tt = str.maketrans('123', '456')

  {
49: 52, 50: 53, 51: 54}

  
>>> '123456'.translate(tt)

  
'456456'
0
相关文章