设为首页 收藏本站
查看: 2114|回复: 0

[经验分享] python标准模块shlex

[复制链接]

尚未签到

发表于 2018-8-5 06:54:22 | 显示全部楼层 |阅读模式
  shlex模块实现了一个类来解析简单的类shell语法,可以用来编写领域特定的语言,或者解析加引号的字符串。
  处理输入文本时有一个常见的问题,往往要把一个加引号的单词序列标识为一个实体。根据引号划分文本可能与预想的并不一样,特别是嵌套有多层引号时。例:
  有文本quotes.txt,内容如下
  This string has embedded "double quotes" and 'single quotes' in it,
  and even "a 'nested example'".
  一种简单的方法是构造一个正则表达式,来查找引号之外的文本部分,将它们与引号内的文本分开,或者反之。这可能带来不必要的复杂性,而且很容易因为边界条件出错,如撇号或者拼写错误。更好地解决方案是使用一个真正的解析器,如shlex模块提供的解析器。以下是一个简单的例子,它使用shlex类打印输入文件中找到的token。
  


  • #!/usr/bin/python

  • import shlex
  • import sys

  • if len(sys.argv) != 2:
  •     print 'Please specify one filename on the command line.'
  •     sys.exit(1)

  • filename = sys.argv[1]
  • body = file(filename, 'rt').read()
  • print 'ORIGINAL:', repr(body)
  • print

  • print 'TOKENS:'
  • lexer = shlex.shlex(body)
  • for token in lexer:
  •     print repr(token)
  

  执行    python  shlex_example.py  quotes.txt
  结果
  

  ORIGINAL: 'This string has embedded "double quotes" and \'single quotes\' in it,\nand even "a \'nested example\'".\n'
  

  TOKENS:
  'This'
  'string'
  'has'
  'embedded'
  '"double quotes"'
  'and'
  "'single quotes'"
  'in'
  'it'
  ','
  'and'
  'even'
  '"a \'nested example\'"'
  '.'
  另外,孤立的引号(如I'm)也会处理。看以下文件
  This string has an embedded apostrophe, doesn't it?
  用shlex完全可以找出包含嵌入式撇号的token
  执行    python  shlex_example.py  apostrophe.txt
  结果:

ORIGINAL: "This string has an edbedded apostrophe, doesn't it?"  


TOKENS:
'This'
'string'
'has'
'an'
'edbedded'
'apostrophe'
','
"doesn't"
'it'
'?'

可以看出shlex非常智能,比正则表达式方便多了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546685-1-1.html 上篇帖子: python string 下篇帖子: python 数字
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表