shell去掉字符两端字符_马克的Python学习笔记#字符串和文本

aa84ee153d90db19b85d6001dedda29c.png

针对任意多的分隔符拆分字符串

无论是解析数据还是产生输出,几乎每一个有实用价值的程序都会涉及某种形式的文本处理。假如我们需要将字符串拆分为不同的字段

但是分隔符以及分隔符之间的空格在整个字符串中并不一致。对于这种情况,我们可以用字符串对象的re.split()方法来解决。举个例子:

>>> line = 'asdf fghj,asdf,     foo'
>>> import re
>>> re.spilt(r'[:, s]s*', line)
['asdf', 'fghj', 'asdf', 'foo']

re.spilt()这玩意可以为分隔符指定多个模式。分隔符可以是逗号,分号或者是空格符。只要找到对应模式,无论对应点两端是什么字段,整个匹配结果都是那个分配符,最终的结果就是字段列表,就如同str.spilt()得到的结果一样

在字符串的开头或者结尾做文本匹配

有时候我们需要在字符串的开头或者结尾处按照指定的文本模式进行检查。这个时候,我们就可以调用str.startswith()和str.endswith()就可以了

>>> filename = '1.txt'
>>> filename.endswith('.txt')
True
>>> filename.startswith('file:')
False
>>> url = 'http://www.python.org'
>>> url.startswith('http')
True

如果需要同时针对多个选项进行检查,我们就只需要给startswith()和endswith()提供包含可能选项的元组就好,比如说就像这样:

from urllib.request import urlopen

def read_data(name):
    if name.startswith(('http', 'https', 'ftp:')):
        return urlopen(name) .read()
    else:
       with open(name) as f:
            return f.read()

有意思的是,Python需要把元组当成输入的一个地方,如果我们刚好把选项指定在列表或者集合中的时候,请确保首先用tuple()将它们转换为元组

利用shell通配符做字符串匹配

当开发环境在Unix环境下的时候,我们就可以用fnmatch模块的fnmatch()和fnmatchcase()这两个函数来做文本批评人

#导入函数
>>> from fnmatch import fnmatch, fnmatchcase
#调用
>>> fnmatch('foo.txt', '*.txt')
True

注意:fnmatch的匹配模式所采用的大小写区分规则和底层文件系统相同,也就是说在macOS和Windows下的输出是不同的。如果这个区分很重要的话,我们就应该使用fnmatchcase()函数而不是fnmatch()函数。

fnmatch所完成的匹配操作有点介乎于简单字符串方法和全功能正则表达式之间。如果实际上是想编辑匹配文件名的代码,那就应该使用glob模块来完成

参考书目

《Python CookBook》作者:【美】 David Beazley, Brian K. Jones

Github地址:

yidao620c/python3-cookbook​github.com
8836d0f84a3899a635fa11a2dba6d523.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值