Python 3.x 中 maketrans 和 translate 用法

本贴最后更新于 2824 天前,其中的信息可能已经事过景迁
    1. makestrans()用法
  1. 语法: str.maketrans(intab, outtab]);
  2. Python maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,
  3. 第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
  4. 注:两个字符串的长度必须相同,为一一对应的关系。
  5. Python3.4 已经没有 string.maketrans()了,取而代之的是内建函数:
  6. bytearray.maketrans()、bytes.maketrans()、str.maketrans()
  7. """
  8. intab = "abcd"
  9. outtab = "1234"
  10. str_trantab = str.maketrans(intab,outtab)
  11. test_str = "csdn blog: http://blog.csdn.net/wirelessqa"
  12. print (test_str.translate(str_trantab)) # 3s4n 2log: http://2log.3s4n.net/wirelessq1
  13. """
    1. translate() 用法
  14. 根据参数 table 给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中。
  15. 语法:
  16. str.translate(table[, deletechars]);
  17. bytes.translate(table[, delete])
  18. bytearray.translate(table[, delete])
  19. 若给出了 delete 参数,则将原来的 bytes 中的属于 delete 的字符删除,剩下的字符要按照 table 中给出的映射来进行映射
  20. """
  21. 若 table 参数为 None,则只删除不映射

  22. print(b'http://www.csdn.net/wirelessqa'.translate(None, b'ts')) #b'
  23. 若 table 参数不为 NONE,则先删除再映射

  24. bytes_tabtrans = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  25. print(b'http://www.csdn.net/wirelessqa'.translate(bytes_tabtrans, b'ts')) #b'
  26. """
    1. 闭包: 它是个内层函数,由一个变量来指代,而这个变量对于外层包含它的函数来说是本地变量
  27. """
  28. def make_adder(addend):
  29. def adder(augend): #adder为内层函数
  30. return augend + addend
  31. return adder
  32. a = make_adder(1) #产生一个闭包,addend 为 1,注意 return 的是 adder
  33. b = make_adder(2) #产生另一个闭包,addend 为 2,注意 return 的是 adder
  34. print (a(100), b(100)) #a(100)就相当于 adder(100),adden 之前为 1,因此返回 100+1
  35. """
    1. 对 translate 方法的简单封装,使用起来更加方便
  36. frm : intab
  37. to : outtab
  38. delete : 指定删除字符
  39. keep: 指定保留字符
  40. delete 和 keep 有重叠时,delete 优先
  41. """
  42. def my_translator(frm = b'', to = b'', delete = b'', keep = None):
  43. if len(to) == 1:
  44. to = to * len(frm) #如果to只有一个字符,将字符的数量跟frm相等,这样才能一一对应
  45. #构建一个映射表
  46. trans = bytes.maketrans(frm, to)
  47. if keep is not None: #如果有保留字
  48. allchars = bytes.maketrans(b'', b'') # 获取空映射表的所有字符
  49. keep = keep.translate(allchars, delete) # 从keep中去除delete中包含的字符,即keep与delete有重合时,优先考虑delete
  50. delete = allchars.translate(allchars, keep) # delete为从全体字符中除去keep,即不在keep的都删掉
  51. # 闭包
  52. def my_translate(s):
  53. return s.translate(trans, delete)
  54. return my_translate
  55. 测试 my_tranlator

  56. 只保留数字

  57. digits_only = my_translator(keep = b'0123456789')
  58. print(digits_only(b'http://www.csdn.net/wirelessqa 520520')) #b'520520'
  59. 删除所有数字

  60. no_digits = my_translator(delete = b'0123456789')
  61. print(no_digits(b'http://www.csdn.net/wirelessqa 520520')) #b'http://www.csdn.net/wirelessqa '
  62. 用*替换数字

  63. digits_to_hash = my_translator(frm = b'0123456789', to = b'*')
  64. print(digits_to_hash(b'http://www.csdn.net/wirelessqa 520520')) #b'http://www.csdn.net/wirelessqa ******'
  65. delete 与 keep 有重合时的情况

  66. trans = my_translator(delete = b'20', keep = b'0123456789')
  67. print(trans(b'http://www.csdn.net/wirelessqa 520520')) # b'55'
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖
  • 笔记

    好记性不如烂笔头。

    311 引用 • 794 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Word
    13 引用 • 41 回帖 • 2 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖 • 1 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 232 关注
  • 导航

    各种网址链接、内容导航。

    45 引用 • 177 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 506 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 120 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 3 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 533 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 739 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 2 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    187 引用 • 832 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 649 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 671 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    198 引用 • 543 回帖 • 1 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 265 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 111 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 叶归
    12 引用 • 56 回帖 • 23 关注
  • 印象笔记
    3 引用 • 16 回帖 • 2 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    172 引用 • 1538 回帖 • 1 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 828 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 641 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 352 关注
  • 笔记

    好记性不如烂笔头。

    311 引用 • 794 回帖
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 132 关注