【python學習】文本處理之-translate

來源:互聯網
上載者:User

2011-09-15

看cookbook 看到很神奇的string.translate 函數

可以剔除字串中你不需要的串,並可做 maketrans映射 將一些字元,映射成另外的字元,目前還沒想到應用情境。
cookbook封裝了 translate代碼 建立一個facade 函數: 

import string
def translator(frm='', to='', delete='', keep=None):
if len(to) == 1:
to = to * len(frm)
trans = string.maketrans(frm, to)
if keep is not None:
allchars = string.maketrans('', '')
delete = allchars.translate(allchars, keep.translate(allchars, delete))
def translate(s):
return s.translate(trans, delete)

return translate>>> digits_only = translator(keep=string.digits)
>>> digits_only('Chris Perkins : 224-7992')
'2247992'

真正神奇的是 自己列印了 string.maketrans(frm, to) 的值, 結果竟然都是空白。搞了半天沒弄懂是怎麼完成映射的?

走進 lib/string.py 看原始碼,才明白 ,maketrans結果是返回一個256bytes長度的字串,而不是from to都為空白時的空串,windows下竟然什麼都列印不出來,害我跟蹤了大半天。linux下可以看到 字串的完整值,英文字元 數字和一些符號。

trans = string.maketrans(frm, to) 獲得原始的256位元組字串, 然後找到keep和delete的差集作為保留值,最後得出需要保留的串,將原始字串解釋為需要值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.