上篇对python中的字符串进行了列举和简单说明,但这些方法太多,逐一背下效率实在太低,下面我来对这些方法安装其功能进行总结:
1.字母大小写相关(中文无效)
1.1 S.upper() -> string
返回一个字母全部大写的副本
1.2 S.lower() -> string
返回一个字母全是小写的副本
1.3 S.swapcase() -> string
返回一个字母大小写转换后的副本
1.4 S.title() -> string
将单词的首字母大写,即为所谓的标题
方框里是中文的编码,可以发现 s 还是大写了,说明会无视其他类型的字符,找到英文单词就将其首字母大写
1.6 S.capitalize() -> string
将字符串的首字母大写,要注意不是所有单词,注意和上面的区别
而且当字符串的首字符不是字母的时候是无效的
1.5 S.isupper() -> bool
判断字符串内的字母是否全是大写,字符串中必须要有字母,返回布尔值
和其他字符混合时情况如下
会无视其他字符,只对字母进行判断
1.6 S.islower() -> bool
判断字符串内的字母是否全是小写,字符串中必须要有字母,返回布尔值
和大写判断是相对应的,这里不继续举例了
1.7 S.istitle() -> bool
判断字符串是否符合标题格式,返回布尔值,关于python字符串中何为标题上面也是详细介绍了,这里不多说。
2.字符串组成字符判断
字符串内的字符除了是英文字母之外,还可以有其他字符,有一些方法可以对字符串的组成字符进行判断
2.1 S.isalpha() -> bool
判断字符串是否全是由字母组成,返回布尔值
只有是全字母才行,有数字和中文等都不行
2.2 S.isdigit() -> bool
判断字符串是否全是由数字组成,返回布尔值
和上面类似,不多说明
2.3 S.isalnum() -> bool
判断字符串是否全是由字母和数字组成,返回布尔值
是上面两种判断的合并
2.4 S.isspace() -> bool
判断字符串是否都是由空字符组成,返回布尔值
空字符不意味着字符串为空,如空格,\n 等特殊字符都算是空字符
3.字符串是否是以某特定字符开头或结尾的判断
3.1 S.startswith(prefix[, start[, end]]) -> bool
判断是否是以某特定字符开头,返回布尔值
默认是从第一个字符开始,也就是索引值为0开始,可以用索引来指定对某个范围的字符进行判断
3.2 S.endswith(suffix[, start[, end]]) -> bool
判断是否是以某特定字符结尾,返回布尔值
和上面类似,不多解释
关于字符串中带判断的就是这么多,下面总结一下究竟可以判断什么:
1.字符串里的字母是否全是小写或大写
2.字符串是否符合标题格式的判断
3.字符串的组成是否是全字母,全数字,或全是字母和数字,或者全是空字符
4.字符串是否是以给定的字符开头或结尾
4.在字符串内寻找给定字符
4.1 S.find(sub [,start [,end]]) -> int
在原字符串内寻找给定的字符,找到了的第一个,返回其索引值,没找到返回-1
注意是从左向右寻找,找到的第一个,像这里的 o ,在原字符串有多个,但只返回了第一个的索引值,另外当给的字符不只一个时,按给的字符串的第一个字符作为基准点,如这里的 co 返回的就是 c 的索引值。当然可以指定范围,但指定范围其并不意味会重新计算索引值,得到的依然是相对于整个字符串的索引。
4.2 S.rfind(sub [,start [,end]]) -> int
与上面的相同,只不过是从右往左寻找。
4.3 S.index(sub [,start [,end]]) -> int
和 find() 方法基本一样,只不过 find() 找不到时返回的是-1,而 index() 找不到是会报错。
4.4 S.rindex(sub [,start [,end]]) -> int
同理,这个是从右往左找
5.字符串出现的计数
和寻找类似,不过上面介绍的寻找的方法都只是找到第一个,如果我想自动某个特点的字符串在原字符中出现了多少次的时候怎么办,就可以使用计数了。
5.1 S.count(sub[, start[, end]]) -> int
这个方法会找到所有指定的子字符串,当放其出现的次数,没找到的话则返回0
6.字符的替换
注意,虽然说是替换,但原字符串是不可变的,我在上篇也说过,字符串的所有方法都没有改变原字符串本身,都是返回了一个新的对象。
所谓的替换,只是针对与返回对象的结果而已。
5.1 S.replace(old, new[, count]) -> string
可以看出原字符串本身是不变的,只是返回了一个新对象,这个对象在内存之中,如果后面要有利用这个新对象的话,可以将其赋值给变量,当然也可以当做函数的参数直接传参,但传参的时候要注意数据类型。
其中,count 指定要替换的次数,不指定则全部替换
7.字符串中的对齐和填充等
这里的操作类似于在world中编辑文字,所以可以联想着理解。
7.1 S.ljust(width[, fillchar]) -> string
左对齐
首先要体现对齐的效果要有一个前提,那就是那一行不能是满的,否则无论怎么对齐也没有用,而在python中,一个字符串对象默认就是占满一行的,其行宽就是字符串是长度。
但是,当我强制声明这一行的宽度是多少,而这个宽度(width)大于原字符串的长度,此时对齐就有效果了。
为了体现效果我将光标放上去了,否则都是空格看不出来。
我们将一行的宽度设置为15,而原字符串我用 len()内置函数得出其长度,可以知道原字符串长度为11。当我指定一行长为15,并设置左对齐,右边的多出来的位置就默认用空格填充了,当然我们也可以指定用什么填充(fillchar),只能用字符串填充。
注意,只能用一个字符,且不能用中文。
7.2 S.rjust(width[, fillchar]) -> string
右对齐,原理同上
7.3 S.center(width[, fillchar]) -> string
居中对齐,原理也一样,但是这里指定的宽度是两边的和,且多出来的位置无法平均分配到两边的话会优先给右边
设置为15时,多出来的位置是15-11=4,可以平均分到两边去,每边都是4/2=2个位置,但设置为16时,16-11=5,5个位置无法平均分配,此时优先给右边多一个。
7.4 S.zfill(width) -> string
快捷的填充方式,只不过只能是右对齐,且填充的内容为 0
7.5 S.strip([chars]) -> string or unicode
除了填充外,我们还可以反填充,这个方法是去掉格式类似于填充后的字符串内的填充内容的。
但是,这并不意味着我们要使用了对齐填充方法以后才能用,只有格式符合就可以。
默认是去除两边的空格,不过有几个,注意,中间的空格是不去除的。
当然,我们还可以指定去除的字符
只要填充内容是一样的,指定填充字符的时候用几个都无所谓,就算超过原字符串中的填充字符也可以。
7.6 S.lstrip([chars]) -> string or unicode
和上面的类似,不过这个只去除左边的填充内容
7.7 S.rstrip([chars]) -> string or unicode
同类,只去除右边的
8.字符串的分隔
字符串的分隔是用过给定的标记进行分隔后,返回一个由被分隔后的字符串组成的新对象,就像切菜一样,画好标记,手起刀落,菜就分成了几段了。
8.1 S.split([sep [,maxsplit]]) -> list of strings
方法返回的是一个列表对象,seq就是给定的字符串,maxsplit 表示分隔的最大次数,默认只要出现给定的分隔字符串都会进行分隔。
其中有一些很奇怪的行为特效,一个,两个分隔字符相邻时,列表的对应位置会出空字符串元素,最大次数为0时不分隔,分隔字符在字符串的最后时也会出现空字符串。
另外,分隔是从左向右的,是全部分隔,方向倒是不重要,结果是一样的,但如果指定了最大次数,那就有意义了,因为计数是分隔次数的计算是从左向右的。
8.2 S.rsplit([sep [,maxsplit]]) -> list of strings
同上,只不过分隔方向是从右向左
8.3 S.splitlines(keepends=False) -> list of strings
按照换行符分隔,注意linux中的换行符为 \n ,windows中的换行符为 \r \n
上面的分隔方式都要一个特点,那就是指定的分隔字符是不会出现到分隔后的结果中的
8.4 S.partition(sep) -> (head, sep, tail)
和上面的分隔方法相比,这种分隔方法返回的是一个元祖对象,且分隔次数只有一次,另外被按照(‘分隔字符之前‘,‘指定的分隔字符‘,‘分隔字符之后‘)排序。
另外,也是找到的第一个,是从左向右找的。
8.5 S.rpartition(sep) -> (head, sep, tail)
同上,不过是从右往左找。
9.特殊字符转义
9.1 S.expandtabs([tabsize]) -> string
将制表符(\r )换成空格,默认一个制表符转换8个空格,可以用 tabsize 指定转换空格的个数
制表符默认是用tab键输入
10.字符串编码
10.1 S.decode([encoding[,errors]]) -> object
解码
10.2 S.encode([encoding[,errors]]) -> object
编码
编解码问题会在文件操作中细讲
11.字符串拼接
11.1 S.join(iterable) -> string
前面的博文详细讲过,这里不再重复
12.字符串格式化
12.1 % 运算符
前面的博文详细讲过,这里不再重复
12.2 S.format(*args, **kwargs) -> string
% 格式化的升级版,一般% 就够用了,所以我也没怎么了解过,这里就不乱说了。
13.字符串过滤
13.1 S.translate(table [,deletechars]) -> string
根据参数table给出的表(翻译表,翻译表是通过maketrans方法转换而来)转换字符串的字符, 要过滤掉的字符放到 del 参数中。
个人也没用过,以后有机会就进行补充。