str.translate() --文本过滤和处理

问题: 想清除整个范围的字符,或者去掉音符

1、使用str.translate()
s = 'python\fis\tawesome\r\n'
# 第一步是清理空格,可以先建立一个小型的转换表,然后使用reanslate()方法
remap = {
    ord('\t'): ' ',
    ord('\f'): ' ',
    ord('\r'): None
}
a = s.translate(remap)
a
Out[3]: 'python is awesome\n'

# 可以利用这种重新映射的思想进一步构建出更加庞大的转换表。例如:把所有的Unicode组合字符都去掉
import unicodedata
import sys
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c)))  # combining()函数可对字符做检查,判断它是否为一个组合型字符
b = unicodedata.normalize('NFD', a)  # NFC表示字符应该是全组成的(即,如果可能的话就使用单个代码点);NFD表示应该是使用组合字符,每个字符应该是能完全分解开的。
b
Out[9]: 'python is awesome\n'
b.translate(cmb_chrs)
Out[10]: 'python is awesome\n'
2、另外一种清理文本的技术涉及I/O编码和解码函数:先对文本做初步清理,然后通过结合encode()和decode()操作来处理文本
a = 'python is awesome\n'
b = unicodedata.normalize('NFD', a)  # 先对原始文本做分解操作
b.encode('ascii', 'ingore').decode('ascii')  # 这种方法只有当我们最终的目标是ASCII文本时才有用
Out[11]: 'python is awesome\n'
总结:

1、对于简单的替换操作,用str.replace()通常是最快的方式--即使必须多次调用也是如此
例:

def clean_spaces():
    s = s.replace('\r', '')
    s = s.replace('\t', ' ')
    s = s.replace('\f', ' ')
    return s

2、如果需要做任何高级的操作,比如字符到字符的重映射或删除,那么translate()方法还是非常快的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值