ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Python字符串处理全攻略:从大小写转换到高效操作

Python字符串处理全攻略:从大小写转换到高效操作 在中间这个模块里面, 会把常见的方法做个介绍, 这些方法包括把大写变成小写或者把小写变成大写的转化操作还有像is开头的那个判断函数, 再就是给字符串进行填充、寻找内容、替换掉某些词、切断成一段段的分割功能, 以及连在一起拼接起来的操作, 最后还会提到修剪两边空白的作用。可以肯定, 许多正在处于学习过程中的开发者, 是具备接触并了解过软件模块这一概念的。该模块里头的东西, 大体上就是那些用来处理字符串的函数。说再多话其实都是没有用的, 刚开始学习的小伙伴不赶紧收藏起来吗。接下来的内容将会涉及到对于字符串里面的大写形式和小写形式的介绍, 并且还会提到一些用来做判断的函数。还有对字符串进行那些经常用的操作, 比如填满、查找、改动、剪掉、加上、切开这些。1.大小写转换这个叫做大写转大写或者小写转小写的操作, 在整个过程里头, 地位还是蛮重要的, 它主要可以分成三种不同的类型。首先, 将所有的字母转换为大写形式可以使用函数upper(), 随后, 若要将全部字母更改为小写状态则可以借助于lower()这个操作方式。这两个函数跟直译过来的意思一样, 会先把指定的字符串进行大小写格式的变更操作, 然后再把它生成一个新的字符串来存储。必须要知道的是, 现在的做法会去生成一个全新的字符串拿来存放数据, 这表示它没有办法直接作为一个可以进行操作的方式。upper() 这个功能, 它的主要作用是负责将指定字符串变成大写格式。这一操作, 既可以被单独使用, 也可以被放置在 print 函数里面来执行。lower这个函数, 它的功能负责把给定的那个字符串变成小写的形式, 它可以被单独地进行使用, 同时它也可以被安排在print函数的内部来一起使用。代码如下:importstringsabcde#放入print中使用print(s.upper())print(s.lower())print(abcdef.upper())print(QWERT.lower())#这里注意是通过生成新的字符串而不是更改原来字符串s.upper()print(s)效果如下所示第二种情况, 指的是字符串首部变更大小写这个操作, 它包含了标题格式化的功能以及对应的函数机制。函数title()会对提供的字符串进行处理, 使得其中包含的所有单词的首字母变成大写形式, 而后面的其他字母则全部转变为小写形式。()将会把所提供的字符串里面, 开头的字母给改成大写的样子, 而其余部分的字母则都会被设置成小写。这两个函数在实际上, 往往是被应用于文稿改写这一类工作场景之中的。代码的测试情况, 如下所示:importstringsabcde,qweRTYtabcde qweRTY#以隔开的单词print(s.title())print(s.capitalize())#以空格隔开的单词print(t.title())print(t.capitalize())结果如下所示结果是1这一点是非常清楚的, 第3行里只有第一个单词里面的A以及第二个单词里面的Q是大写的, 剩下的其他所有字母都是小写。至于括号里面需要填入的内容所对应的那一行和第四行来说的话, 只有开头的那个字母会处于大写的状态。第三种大小写反转()这个家伙干的事儿啊, 就是在原来那串文本里面做文章, 专门把大写的字母给它改成小写, 再把小写的字母给弄成大写。我们采取“”这个具体案例来进行阐述与说明。结果应该为因为这一功能平时不太会用, 所以这里就不再啰嗦着多说什么了。2.is判断函数is这个判断函数, 它是一种用来进行判断的函数, 依据规定的字符串情况, 来确定是否符合相应的条件, 然后返回True或者是False。主要判断如下对给定的字符串进行判断, 确认该字符串中的所有字符是否全都是数字。():判断给定的字符串是否全为字母对所提供的字符串执行判定任务, 核心目的在于识别该字符串内部是否仅仅由数字元素以及字母元素这两种类型组成。():判断给定的字符串是否全为大写对给定的字符串进行判断, 查看其是否全部由小写字母组成。判断: 给定的字符串, 是否符合这个函数title的要求。: 用来去判断所给的那个字符串, 到底是不是空白符, 这里面包括了空格、换行呀还有制表符这些东西。():判断给定的字符串是否为可打印字符只有空格可以换行、制表符都不可以这个():用于去判断给定的那个字符串, 是不是符合命名的规则, 命名规则的意思是要求字符串的开头部分, 必须只能是字母或者是下划线, 并且不能包含任何除了数字、字母以及下划线之外的字符, 如果包含了其他任意类型的字符, 那么就是不规范的。importstring#1234 全是数字 为Trueprint(1234.isdecimal())#asdf4 中4是数字不是字母 为Falseprint(asdf4.isdigit())#qwe12 中既不是数字 也不是字母为Falseprint(qwe12.isalnum())#asdf全是小写 为Trueprint(asdf.islower())#ADS全是大写 为Trueprint(ADS.isupper())#Wshdqwe中 虽然W大写 但是第二个单词qwe中q小写 不符合title()所以为Falseprint(Wshdqwe.istitle())#\n为换行 是空白符 为Trueprint(\n.isspace())#\t为制表符 不可打印 为Falseprint(\t.isprintable())#qe123 符合命名规则 为Trueprint(qe125.isidentifier())结果判定为以下这几种情况。3.字符串填充说到填充这件事, 现在的人都不会感到陌生。填充这个操作虽然在日常生活中不太常见, 但是到了紧要时刻, 它能够发挥出特别重大的作用。填充操作就是拿着一个长度被限定好的字符串, 然后往里面填入事先指定的字符。最终把这个字符串扩充到了一个固定的长度。所以, 在这个过程当中最关键的就是要盯紧两个方面。第一点是关于扩充的长短, 这对应的是 width , 也就是说, 只有当字符串的长度小于 width 的时候才会发生扩充操作, 而如果字符串的长度大于限定值的长度, 那么系统自然会直接返回字符串本身, 并不会进行任何修改。第二种情况是涉及扩充的位置问题, 它一共可以划分为三种不同的类型, 具体的分类标准在于源字符串的排列方向分别是处于左边、右边的情况或者是位于正中间的位置。把字符串放在正中间的位置, 这个正中间位置是由宽度数值width来确定的, 于是原来的字符串会乖乖待在中央, 而用来填充的扩充物就会出现在左边的两边和右边的两边。左对齐的功能是由函数ljust(width)来实现的, 这里l是left的缩写意思是左边, 原始字符串会位于左侧, 而填充内容则会出现在该字符串的右侧。居右对齐的功能是rjust这个函数, 并且它需要带上宽度width作为一个参数, 这里的字母r是用来表示right也就是右边的意思, 于是源字符串就会出现在右边, 而填充物则会出现在字符串的左边。有一点儿需要大家注意, 填充物是可选的内容, 其默认为空格, 可以更改为任意字符。可以举一个具体的例子, 就是把字符串”qwer”放在左边, 用”“字符来填充, 一直到总长度变成10为止, 这样的实现代码应该写成下面的样子:importstringprint(qwer.ljust(10,))运行代码之后所得出的最终结果。在这里单独提一下函数 zfill(width) , 为什么要把重点放在介绍这个 zfill 函数上面呢?一方面, zfill(width)这个函数它只需要传人一个名为width的参数就可以。然后, 那个用来填充的东西就是“0”了, 而且采用的方式是往右边进行填充的, 中心对齐这种说法其实不太准确, 它就是靠右对齐。从另外一个角度来看, 这个函数会去识别字符串里面的正负符号如果发现是加号或者是减号的话, 那就保持原样不动, 然后越过去, 继续往下面填充。请提供需要改写的句子。importstring#不加-纯数字用填充物0将字符串前填充满print(12345.zfill(10))#加-纯数字越过-用填充物0将字符串前填充满print(-125.zfill(10))#加数字字母组合越过用填充物0将字符串前填充满print(qwe125.zfill(10))#加其他符号用填充物0将字符串前填充满print(#qwe12.zfill(10))我们可以看到最终的结果, 具体是这样的。4.子字符串搜索1.子字符串位置搜索count(sub)主要是针对那个指定的字符串进行搜索, 看看里面是不是有给定的子字符串sub, 如果说存在的话, 那么就返回它出现的次数。起始位置和结束位置共同确定了搜索的范围, 假如这两者没有被指定具体数值, 那就意味着会在整个字符串的内容里面进行搜索操作。明白了, 请提供您需要改写的句子。importstring#全部字符串内 搜索qwe 出现的次数print(qwertasdqwezxcqwe.count(qwe))#由于字符串从0开始计数1为字符串第二个相当于从w开始print(qwertasdqwezxcqwe.count(qwe,1))#从字符串第 2个开始到第15个截止共出现qwe的次数print(qwertasdqwezxcqwe.count(qwe,1,14))运行结果统计如下2.对字符串的最开始那一段和最末尾那一半进行检查, 然后得出结论。()()这两个函数的作用是一样的, 判断的是函数的开始, 或者是末尾的字符串, 是否为指定的字符串。与之前的那个搜索是一模一样的, 可以接着给字符串加上边界, 要是没有加上的话那就是在全字符串里面进行搜索。这两个函数都属于那种用于进行判断的类型, 它们所返回的结果是True以及False。这里需要强调的是, 输入的内容不仅可以是子字符串, 还可以是元组。如果是元组的话, 只要其中有一个条件成立, 结果就为True。请提供需要改写的句子。importstring#搜索开头位置为qwe 符合条件为Trueprint(qwertasdqwezxcqwe.startswith(qwe))#开头位置为字符串下标为1开始也就是说开头为wer与qwe不同为Falseprint(qwertasdqwezxcqwe.startswith(qwe,1))#结尾位置为qwe符合条件 为Trueprint(qwertasdqwezxcqwe.endswith(qwe,asd))运行结果为下3.关于字符串位置锁定这一功能, find函数与index函数两者之间的区别与联系是需要被弄清楚的。使用find这个方法去查找指定的sub子字符串的情况, 它会返回这个子字符串第一次出现的位置信息内容, 要是没有找到相关的话, 那么就会返回-1这个数字结果给到用户。rfind 方法用来获取子字符串在最右侧的出现位置, 也就是返回最靠右的那个子的索引结果, 要是找不到的话就返回 -1。当我们调用index(sub)这个函数的时候, 它会返回第一个子字符串所在的具体的位置信息, 如果找不到这样的内容的话, 它就会抛出错误, 也就是报错这种情况。这个操作是去返回那个最靠右边的第一个子位置信息, 一旦没有找到情况, 就会直接报错。通过分析传入参数这个方面可以看出, 查询位置相关的这种功能它同样也具备可以限定范围或者边界的这种能力, 而且它具体怎么进行操作和使用的方法步骤也和之前提到的那个函数的情况是一样的。importstringsqweraqwesfgzqweopprint(s.find(qwe))print(s.rfind(qwe))print(s.index(qwe))print(s.rindex(qwe))最终得到的结果就是下面这样子。这里有一个点是需要引起大家的关注的。在以上这些情形当中, 都意味着已经搜索到了相匹配的子字符序列, 倘若没能进行查找到的话。最终的运行结果出现了异常情况, 其中find这个方法返回了负一, 而index这個操作报错了, 具体就是下述这种情形:5.字符串替换(old, new): 将搜索所得字符串调整为新字符串。把旧的字符串作为替代函数来用的话, 新的字符串是必须要输入的。count是可选择输入的参数, 它代表更改的个数。importstringsqweraqwesfgzqweop#将字符串全部的qwe 换为asdprint(s.replace(qwe,asd))#将字符串前两个qwe 换为asdprint(s.replace(qwe,asd,2))#将字符串全部的qew 换为asd 没有则输出原字符串print(s.replace(qew,asd))将N这个替换选项所提供的制表符也就是那种用来对齐文本的符号, 改写成固定数量的空格。空格数量的计算方式是使用N减去之前的字符串长度, 得到的结果就是需要填补充的空格数。若N-之前字符串长度0 则空格数为N若N-之前字符串长度importstringtqwe\tqwer\tqasdsdf\tasprint(t.expandtabs(4))这里存在一个制表符, 它被设定为长度为4。之前的字符串qwe的长度为3, 用4减去3得到1, 所以需要替换1个空格。第二步是设定长度为4, 因为前一个字符串qwer的长度也是4, 所以用4减去4得到结果0, 最后就会替换掉4个空格。第三个位置用制表符进行占位处理, 设定好的长度是数字4, 而此前字符串的长度已经是7了, 所以将设定值减去现有值得到的结果就是负3。因此, 最终的结果像下面这样呈现出来。6.字符串分割字符串分割, 大家平常用到的函数, 一般就是那个()和这个()。(sep)对给定字符串进行切割切割成三部分首先进行字符串的检索操作去寻找sep, 然后找到sep之后将其前面的那一部分内容划归为一个组别, 接着把sep这个字符自身作为单独的另一种组别来处理, 最后将剩余没有被划分的所有内容当作第三个部分。与这两者之间的相似度是非常高的。主要区别体现在当字符串中没有指定sepy的时候。该内容被划分为三个部分, 第一部分是一个字符串, 然后是第二个空白区域, 最后是第三个空白区域。它被划分成了三个部分, 这三个部分分别是空白、空白以及字符串。代码如下importstringtqwertyuasdfghjklprint(t.partition(yua))print(t.partition(asqw))print(t.rpartition(asqw))运行结果这是一个包含三个元素的元组, 其构成分别是qwert、yua和一个空字符串。(, , )(, , )另一种常见的函数为split(sepNone, -1)和(sepNone, -1)在调用 split() 这个函数的时候, 传递给它的参数存在两种不同的形式。sep指的是切割操作中的参数, 其默认的值是空格。关于切割次数, 如果给它赋上负一的数值, 或者设定为none这个状态的话, 那么就会依据从左到右的顺序对每一个分隔符进行切分操作。()是相同的, 但是其遍历方式是从右到左。最常见在输入与input连用如下importstringtinput().split()print(t)7.字符串添加join()首先, 我们来弄明白可迭代数据到底是个什么东西, 用大白话来说, 它一般指的就是字符串、列表list、元组tuple、字典dict以及集合set这些数据类型, 然后呢, 我们要做的就是把这些可迭代的数据给用字符串连接的方式给拢到一起。再者来说, 每一次在进行迭代过程之中的那个元素, 它必须是属于字符串这一种的类型, 绝对是不可以包含数字的, 同时啊也是不可以包含其他任何种类型的。下面的这些代码是作为一个先例来给你看的。importstring#字符串类型aqwerprint(_.join(a))#元组类型b(a,b,c,d)print(.join(b))#集合类型c{qwe,asd,zxc}print(.join(c))首先, 对于第一个例子来说, 因为它属于字符串类型, 所以每一个单独的字符都采取一种方式来进行处理, 这种处理方式就是利用之前所提到的那个字符串来进行相互之间的交叉操作。同样地, 元组的情况也具备一样的特征, 针对元组和元组彼此的相互关系, 均需要介入等于号这个特定的字符串标识。关于集合这种情形也是需要留意的, 必须着重考虑到集合的无需性这一点, 因此导致其中元素的排序情况可能会出现发生颠倒。按照上面的代码, 最后出来的结果应该是这么个情况:由于参与迭代的每个元素, 必须是字符串类型, 不能包含数字, 或者其他类型。因此会出现错误的情况是, L1等于1加上2再加上3或者L2等于AB这个字符串同时包含一个由a以及cd所构成的集合。8.对字符串进行修剪操作。strip() () ()strip()这个方法的作用是去掉指定字符串里的字符char, 要是没有传入任何参数的话, 那就是去掉空格、制表符还有换行符。括号中的内容是l, 它是left的缩写形式, 这个函数的作用是表示从左边开始一直到右边结束进行遍历操作。这里的括号里面 r代表的是right这个英文单词的缩写, 函数里面的这个参数表示的意思是从右边往左的方向开始进行遍历。请注意移除为到非字符截至的情况, 举个例子吧, 就像这样:importstringaqweasdzxcrtqweprint(a.strip())bqweasdzxcrtqweprint(b.lstrip(q))cqweasdzxcrtqweprint(c.rstrip(qew))a变量是由制表符加上字符串构成的, 因为函数strip()在调用时并没有传入指定的参数值, 所以它执行了默认操作, 即删除掉其中的空白字符。在选项b中, 通过()来传入参数q。此时, 字符串从左向右数的第一个字符为q, 并且该参数会被移除而第二个字符w不属于传入的参数, 修剪动作因此停止。最终, 将剩余的所有内容全部输出。c使用括号传入参数qew, 字符串从右边开始找, 第一个是q, 它在传入参数里一样存在, 因此进行移除处理, 同样地, 第二个字符和第三个字符也都在传入参数内一并移除, 第四个是t, 它并不在传入参数中, 接着就把剩下的所有字符全部输出。输出结果如下最后的, 关于官方文档的内容为。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进