
2.5.2 字符串的处理
字符串属于不可变序列,不能直接改变原字符串的内容,除非将原字符串处理成新的字符串。通过字符串提供的一些方法,可以对字符串进行处理操作。
1.字符串的连接
将两个或多个字符串连接成一个字符串,可以使用“+”符号。如果需要把数字也连接到字符串中,可以先把数字用str()函数转换成字符串,再进行字符串的连接。字符串乘以整数n,将把字符串重复n次。

采用join()方法,可以把存储到列表、元组中的字符串连接到一起,其格式为"分隔符". join(sequence),其中sequence是列表或元组。

2.字符串的分割
字符串的分割用split()方法、rsplit()方法、splitlines()方法、partition()方法和rpartition()方法,它们的功能和格式介绍如下:
- split()格式为split(sep=None,maxsplit=-1),其中sep表示分割符号,默认为None,表示用所有空白字符(空格、换行符\n、制表位\t等)进行分割;maxsplit表示最大的分割次数,默认为-1,表示无限制次数。split()方法的返回值是由分割后的字符串构成的列表。
- rsplit()方法从右边开始进行分割。
- splitlines()方法将字符串用换行符\n分割成列表。
- partition()的格式为partition(sub),在原字符串中查找sub,如果找到sub,则把sub前的字符串、sub字符串和sub后的字符串放到一个元组中,并返回这个元组;如果找不到sub,则返回的元组的第1个元素是原字符串,第2个和第3个元素是空字符串。如果原字符串中有多个sub,则以第1个先找到的字符进行分割。
- rpartition()方法是从右边开始找sub。

3.字符串的查询与检测
字符串的查询方法有find()、rfind()、index()、rindex()、count()、startswith()和endswith(),它们的功能和格式如下:
- find()方法的格式为find(sub[,start[,end]]),其中sub为要被检索的字符串;start和end为起始索引和终止索引,是可选的。find()方法返回首次出现sub的索引值,如果没有检索到,返回-1。
- rfind()方法是从字符串的右侧开始查找,或者从左侧查找最后一次出现匹配字符的索引。
- index()方法的格式与find()方法完全相同,当在原字符串中找不到要被查询的字符串时,会抛出异常,通过异常try…except处理可以进一步处理。
- rindex()方法也是从字符串的右侧开始查找,或者从左侧查找最后一次出现匹配字符的索引。
- count()方法的格式为count(sub[,start[,end]]),返回字符串sub在原字符中出现的次数。
- startswith()的格式是startswith(prefix[,start[,end]]),如果原字符串以prefix开始,返回True,否则返回False。
- endswith()的格式是endswith(suffix[,start[,end]]),如果原字符串以suffix结束,返回True,否则返回False。

Python对字符串的检测还有其他一些方法,这些方法和功能如表2-1所示。
表2-1 字符串检测方法和功能

4.字符串大小写转换
字符串大小写转换方法有swapcase()、lower()、upper()、casefold()和capitalize()。
- swapcase()方法是将大写字符转成小写字符,小写字符转成大写字符。
- lower()和casefold()方法是把字符串全部转成小写。
- upper()方法是将字符串全部转成大写。
- capitalize()方法是将首字符转成大写,其他转成小写。

5.去除字符串首尾的特殊字符
去除字符串首尾特殊字符的方法有strip()、lstrip()和rstrip()。
- strip()方法的格式为strip(chars=None),其作用是去除字符串首尾chars字符,如“$#”,表示去除首尾的$或#符。chars的默认值是None,表示去除首尾的换行符\n、回车符\r、制表位\t和空格等空白符。
- lstrip()方法的格式是lstrip(chars=None),表示去除字符串左侧的字符。
- rstrip()方法的格式是rstrip(chars=None),表示去除字符串右侧的字符。

6.调整字符串的位置
可以在字符串左右两侧补充其他字符得到新的字符串,并可以调整原字符串的位置,可以使用的方法是center()、ljust()、rjust()和zfill()。
- center()方法的格式为center(width,fillchar=''),其中width是新字符串的长度,当新字符串的长度大于原字符串的长度时,原字符串的左右两侧填充fillchar。fillchar的默认值是空格。
- ljust()方法的格式为ljust(width,fillchar=''),其中width是新字符串的长度,当新字符串的长度大于原字符串的长度时,原字符串的右侧填充fillchar。fillchar的默认值是空格。
- rjust()方法的格式为rjust(width,fillchar=''),其中width是新字符串的长度,当新字符串的长度大于原字符串的长度时,原字符串的左侧填充fillchar。fillchar的默认值是空格。
- zfill()方法的格式为zfill(width),其中width是新字符串的长度,当width的值大于原字符串的长度时,在原字符串的左侧补充0。

7.字符串的替换
字符串中某些字符可以被新的字符替换,可以使用的方法是replace()、maketrans()、translate()和expandtabs()。
- replace()方法的格式是replace(old,new,count=-1),用新字符串new替换旧字符串old,其中count表示替换次数,默认为-1,表示不受限制。
- maketrans()方法用于产生一对映射表格(table),用于translate()方法,其格式为maketrans(string1,string2)或者maketrans(dict)。如果是两个参数,要求两个参数的长度必须一致。如果是一个参数,必须是字典型的Unicode映射关系。所谓映射关系就是一个字符代表另外一个字符,例如“abc”和“123”的映射关系是a->1(a代表1)、b->2(b代表2)、c->3(c代表3)。
- translate()的格式是translate(table),用一个table表示的映射关系替换字符串中的字符。
- expandtabs()的格式是expandtabs(tabsize=8),用于设置字符串中用空格代替制表转义符“\t”的长度,默认为8。

8.移除前缀或后缀
在Python 3.9.6中对字符串新添加了移除前缀和后缀的方法removeprefix(prefix)和removesuffix(suffix),返回被移除后的字符串,原字符串不变。
