我也是第一次听说,maketrans & translate in python
2010-12-26 14:58
357 查看
http://blog.donews.com/tinylee/archive/2007/06/14/1175344.aspx
Python Cook 1.9 简化使用string的translate方法 需求: 想使用强大的string的translate方法,却困惑于它复杂的用法和参数,也不知道string.maketrans的工作机制 .我们需要的只是简单的使用它们的功能.
讨论: 我们在这里简单实现一个方法工厂,可以处理常用的这一类的问题:
>>> no_digits = translator(delete=string.digits)
>>> no_digits(‘Chris Perkins : 224-7992′)
‘Chris Perkins : -’
可以替换指定的字符:
>>> digits_to_hash = translator(from=string.digits, to=’#')
>>> digits_to_hash(‘Chris Perkins : 224-7992′)
‘Chris Perkins : ###-####’
相关说明:
内部方法,在上面的例子中,我们使用了一个内部方法来实现方法工厂,返回一个变量来表示内部方法,然后接收参数来实现功能.
最简单的方法工厂可以写成下面这个样子:
def make_adder(basenum):
def adder(args):
return args+basenum
return adder
比如我们要做一个以100为基数的加法器,可以这样使用:
base100 = make_addr(100)
print base100(45)
>>>145
讨论中的例子,我们返回了自己定制的translate方法 ,它以我们自己定制的delete为参数,来实现我们的keep需求:
keep.translate(allchars, delete)
返回了过滤掉删除字符的字符表.
又做了一次运算,现在剩下的只是要删除的字符了.
如果keep和delete不同时使用,可以这样写:
maketrans(…)
maketrans(frm, to) -> string
Return a translation table (a string of 256 bytes long)
suitable for use in string.translate. The strings frm and to
must be of the same length.
translate(…)
S.translate(table [,deletechars]) -> string
Return a copy of the string S, where all characters occurring
in the optional argument deletechars are removed, and the
remaining characters have been mapped through the given
translation table, which must be a string of length 256.
if you switch the maketrans from & to may be it’s a simple bi-encription way
Python Cook 1.9 简化使用string的translate方法 需求: 想使用强大的string的translate方法,却困惑于它复杂的用法和参数,也不知道string.maketrans的工作机制 .我们需要的只是简单的使用它们的功能.
讨论: 我们在这里简单实现一个方法工厂,可以处理常用的这一类的问题:
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 下面是一些translator的用法: 可以只保留需要的字符 >>> digits_only = translator(keep=string.digits) >>> digits_only('Chris Perkins : 224-7992') '2247992' 可以过滤指定的字符:
>>> no_digits = translator(delete=string.digits)
>>> no_digits(‘Chris Perkins : 224-7992′)
‘Chris Perkins : -’
可以替换指定的字符:
>>> digits_to_hash = translator(from=string.digits, to=’#')
>>> digits_to_hash(‘Chris Perkins : 224-7992′)
‘Chris Perkins : ###-####’
相关说明:
内部方法,在上面的例子中,我们使用了一个内部方法来实现方法工厂,返回一个变量来表示内部方法,然后接收参数来实现功能.
最简单的方法工厂可以写成下面这个样子:
def make_adder(basenum):
def adder(args):
return args+basenum
return adder
比如我们要做一个以100为基数的加法器,可以这样使用:
base100 = make_addr(100)
print base100(45)
>>>145
讨论中的例子,我们返回了自己定制的translate方法 ,它以我们自己定制的delete为参数,来实现我们的keep需求:
allchars = string.maketrans('', '') 返回了包含所有字符的列表
keep.translate(allchars, delete)
返回了过滤掉删除字符的字符表.
allchars.translate(allchars, keep.translate(allchars, delete))
又做了一次运算,现在剩下的只是要删除的字符了.
如果keep和delete不同时使用,可以这样写:
allchars = string.maketrans('', '') delete = allchars.translate(allchars, keep)
maketrans(…)
maketrans(frm, to) -> string
Return a translation table (a string of 256 bytes long)
suitable for use in string.translate. The strings frm and to
must be of the same length.
translate(…)
S.translate(table [,deletechars]) -> string
Return a copy of the string S, where all characters occurring
in the optional argument deletechars are removed, and the
remaining characters have been mapped through the given
translation table, which must be a string of length 256.
if you switch the maketrans from & to may be it’s a simple bi-encription way
相关文章推荐
- Python学习:maketrans和translate方法
- Python中maketrans和translate方法
- python中maketrans和translate的用法
- Python3.5下的string.maketrans及string.translate的使用
- python中maketrans和translate的用法
- python中maketrans和translate的用法
- Python中的两个方法string.maketrans()和string.translate()
- Python 3.x中maketrans和translate用法
- python maketrans and translate
- python中用string.maketrans和translate巧妙替换字符串
- Python 3.x中maketrans和translate用法
- Python maketrans translate
- Make Games with Python & Pygame (1)
- 第十一周:( LeetCode567) Permutation in String(c++ && python)
- Problems & Solutions -- 7 MySQLdb in python
- python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- Shallow Copy & Deep Copy in Python list
- make[1]: Warning: File `libbb/Makefile.in' has modification time 3.2e+04 s in the future 错误
- A Complete Tutorial on Tree Based Modeling from Scratch (in R & Python)
- python 生成器的唯一缺点 & enumerate被遗忘的start & 突然好奇in