1. 查找计算 2. 转换 3. 填充压缩 4. 分割拼接 5. 判定
对于函数的使用,有一点需要注意:一类是属于内置函数,可以直接使用,比如len(str);一类是属于对象方法:对象.方法(参数),eg: s.find('a'),表示在'jiang'中find 出'a'这个字符。
同时需要注意,这些函数并不会改变字符串本身,只是返回一个结果而已。
eg:
s = 'jiang fan' num = s.find('a') print(num)#返回的是第一个a的位置,2 print(s)#并不会改变自身
学习一类函数时,必须要掌握的几个要素分别为:
函数的 作用、参数、语法以及输出结果
第一类,查找计算。除了len是内置函数外,其余的都属于对象方法类
len函数:len(s),返回字符的个数,需要注意的是,一个汉字也算一个字符,而非根据其内存计算得到的2个字符。eg:len(‘woshisz’) 返回7,len('我是sz')返回4,而不是6。len('我是sz\n')转换符仅仅只算一个字符。
find函数:
作用在于查找子字符串的下标位置,语法:find(sub, start = 0, end = len(str)),sub就是查找的对象,strat和end分别表示起始与结束的位置,查找方法是从左往右。若没有找到对应的结果,则返回 -1
eg:
num = 'jiang'.find('a') print(num) num2 = 'jiang fan'.find('an') print(num2)#返回2,说明找的是第一个an,而且此时an是被看作一个整体 num3 = 'jiang fan'.find('a') print(num3)#查找的是第一个a,也是返回2 num4 = 'jiang fan'.find('f') print(num4)#查找f,空格也算一个字符
rfind函数:与find函数的唯一区别在于,该函数是从右往左查找字符下标。这一个 r 表示的就是right,说明从右往左
eg:
num6 = 'jiang fan'.find('a') num7 = 'jiang fan'.rfind('a') print(num6)#返回的是第一个a的位置,2 print(num7)#返回的是第二个a的位置,7
index函数:与find函数几乎一模一样,区别在于,找不到对应的字符串时,返回的结果是 报错 而不是像 find那样返回 -1。
对于二者返回结果的差别,可以从两个函数的本质上去理解:index函数是“获取”对象的下标,而find则是“查找”对象的下标。index无法获取到,那就会报错,而find查找不到,就会返回 -1, 告诉自己 没有找到对象。好比在袋子里找西瓜,一个是无法获取,一个是没有找到西瓜然后告诉对方自己没有找到
rindex函数:类比rfind函数
count函数:
作用:计算子字符串出现的个数
语法:count(sub, start=0, end=len(str))
eg:
num8 = 'jiang fan'.count('a') print(num8)#返回2
第二类,转换类
replace函数:
作用:用新的字符串替换给定字符串中旧的字符串
语法:replace(old_str, new_str, count)
意思是,用新的字符替换旧的字符,替换的字符个数为count个,如果没有表明count为多少,那就是默认全部。
eg:
s = 'jiang fan' print(s.replace(' ',''))
这就能够去除掉所有的空字符串。
s = 'jiang fan' print(s.replace('a','o',1))#只更换一个字符a,而非更改全部的a为o,输出结果为 jiong fan
capitalize函数:
作用:将首字母进行大写,但是并不会改变原字符串,只是返回结果。
title函数:
作用:每个单词的首字母大写。注意“每个单词”这四个字如何理解,其实就和日常理解一样
print('jiang fan-yao%jia_you'.title())#输出结果:Jiang Fan-Yao%Jia_You
也即是说,只要两个字母之间没有紧紧连着,那就能够当成两个独立的单词,比如fan-yao,fan和yao就是两个单词。
lower函数:
作用:每个 字符 都小写
upper函数:
每个字符都大写
第三类,填充压缩
ljust函数:l表示的是left
作用:运用指定的字符,将字符串填充到指定的长度,原字符串在左边
语法:ljust(width, fillchar),width表示指定的填充以后的字符长度,而fillchar表示填充字符
需要注意的是:填充的字符长度为1,而不能为2,否则会报错
eg:
print(s.ljust(12,'x'))#输出jiang fanxxx,原来的字符串长度是9,要填充到12个,所以多加了3个x
rjust函数:
与上相反,原字符串在右边
center函数:
原字符串在中间,两边均匀填充。如果不够分,那么左边填充的少一点,右边的填充多一点
lstrip函数:
作用:移除掉 原字符串 左边的 字符,默认为空字符;
strip表示 脱下 的意思
语法:lstrip(chars)
注意之处:
print('wwwwwooooo shi sz'.lstrip('wo'))#输出结果: shi sz
这儿的参数'wo',并不是仅仅只移除'wo'这一个字符,而是'w' 和 'o' 这两个字符,只要出现了就都会移除掉,一直移除w o,直到碰见第一个空格,才停止。这个wo 就像是一个字符集。
print('wowoojiang shi sz'.lstrip('wo'))#输出结果:jiang shi sz print('jiangwowoo shi sz'.lstrip('wo'))#输出结果:jiangwowoo shi sz;发现第一个字符是j而不包含在wo这个字符集中,因此结束。 print('wojiangwoo shi sz'.lstrip('wo'))#输出结果:jiangwoo shi sz
rstrip函数:
s = ' jiang fan%' print(s.lstrip())#输出jiang fan% print(s.rstrip('%'))#输出 jiang fan
第四类,分割拼接
split函数:
作用:
注意:返回的是列表
语法:split(sep = , maxsplit = )
sep表示分隔符,maxsplit表示最大分割次数
eg:
info = 'sz-18-170' result1 = info.split(sep='-') print(result1)#['sz', '18', '170']
info = 'sz-18-170-0772-123456' #此时,对于后面 0772开头的电话号码就需要放到一起不能根据 - 分割 result2 = info.split(sep='-', maxsplit = 3) print(result2)#['sz', '18', '170', '0772-123456']
partition函数:
作用:根据指定的分隔符,返回 元组( ' 分隔符左侧内容', ' 分隔符 ', ' 分隔符右侧内容 ')
语法:partition(sep)
结果:若查找到分隔符,则返回元组( ' 分隔符左侧内容', ' 分隔符 ', ' 分隔符右侧内容 ');若没有找到分隔符,那么就返回元组( ' 原字符串', ' ', ' ')
eg:
result3 = info.partition('-') print(result3)#('sz', '-', '18-170-0772-123456')
rpartition函数:
与上一个函数区别在于:从右边开始找
result3 = info.rpartition('-') print(result3)#('sz-18-170-0772', '-', '123456')
join函数:
作用:根据指定的字符,将给定的 可迭代对象,进行拼接
语法:join(iterable); 这个iterable就是指可迭代对象,可以为元组、列表、字符串
但是注意:如果是列表这些迭代对象,里面的内容必须都为字符串才可以进行拼接
eg:
m = '-' s = 'jiangfan' lst = ['1','2','j','f']###这儿必须都得为字符,否则无法拼接 print(m.join(s)) print(m.join(lst))
第五类,字符判定类
isalpha函数:
作用:判断是否所有的字符均为字母;注意是所有的字符,包括空格、换行符这些都属于字符
语法:isalpha()
isdigit函数:
作用:判断是否全部都是数字
isalnum函数:
作用:判断是否全部都是 数字或者字母
startswith函数:
作用:判断字符串的前缀是否为给定的字符串
语法:startswith(prefix, start = 0, end = len(str) );prefix表示的就是前缀,start表示的是开始判定的下标,end表示结束时的下标,左闭右开
eg:
filename = '2022-6-13: 某某报告.xlsx' print(filename.startswith('2022-6-13'))#输出:True print(filename.startswith('22', 2, 4))#输出:True
endswith函数:
作用:判定是否以给定字符结束
语法:同上
eg:
filename = '2022-6-13: 某某报告.xlsx' print(filename.endswith('xlsx'))#输出:True print(filename.endswith('报告', 15))#输出:False print(filename.endswith('xlsx', 15))#输出:True