【python学习】文本处理之-translate

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的差集作为保留值,最后得出需要保留的串,将原始字符串解释为需要值。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术/开源

从C#到TypeScript - 高级类型

C# vs TypeScript - 高级类型 上一篇讲了基础类型,基本上用基础类型足够开发了,不过如果要更高效的开发,还是要看下高级类型,这篇和C#共同点并不...

2179
来自专栏鸿的学习笔记

Python和Scala的定义变量

每一门的编程语言背后都代表着某一种特别的哲学,由这一哲学进而设计出属于这门程序语言的语法,Python和Scala也不例外。我们从变量的定义去一窥Python和...

982
来自专栏GreenLeaves

Jquery dom搜索之siblings()方法

      如果给定一个dom的元素集合的算则其对象,siblings()方法允许我们在dom树中搜索这个元素集合的同胞元素,并匹配这些元素构造一个新的对象,J...

2327
来自专栏黑泽君的专栏

java基础和面向对象面试题_01

1872
来自专栏Vamei实验室

Java基础10 接口的继承与抽象类

在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体。interface为类提供了接口规范。 在继承中,我们为了提...

20110
来自专栏python3

python3--对象之间的交互,类命名空间与对象、实例的命令空间

现在有个游戏人与狗,人定义一个类,狗定义一个类,如何让两个类之间互相交互起来,让这个游戏变得更加有意思,代码如下

1221
来自专栏web前端-

面向对象的几种设计模式

其实面向对象是相对于面向过程而言,通俗来说就是创建对象,每个对象有自身的属性和方法,对象.属性  对象.方法 实际上这已经是一个面向对象的过程了,面向过程,是指...

3614
来自专栏HTML5学堂

JS 计时器参数剖析与真题

HTML5学堂-码匠:计时器的第一个参数,包含几种不同的书写方法,可以是函数名,匿名函数,JS代码字符串,还有一些面试题当中会出现“函数调用”的书写方式。 那么...

3234
来自专栏菜鸟前端工程师

JavaScript学习笔记008-this0arguments0箭头函数

1021
来自专栏诸葛青云的专栏

C语言基础——循环详解!

表达式 每一次循环都要判定表达式的值 如果为真(表达式的值为1)执行循环 否则不再执行循环

2060

扫码关注云+社区

领取腾讯云代金券