![]() |
5.6 字符串的常用函数与方法 |
在编写程序的过程中要善用字符串函数,因为字符串函数非常重要而且很实用,由于与字符串有关的方法众多,有些方法来自于对象(object),有些方法则是由类提供的属性和方法。声明了字符串变量之后,就表示实现了str()类,而它的方法都能被声明的字符串对象使用,通过“.”(dot)运算符来调用对象的方法。
常用的函数包括计算字符串长度、替换字符串、查找字符串,甚至是比较两个字符串的函数,等等。下面介绍Python提供的一些用于字符串的函数与方法。
len()是内建的函数,它会返回字符串的长度,空格符、特殊字符和控制字符也会计算在内。例如转义字符的字符长度是1(参考范例程序len.py):
s= "The first wealth is health\u266C" print("{} 长度是{}".format(s, len(s)))
程序的执行结果如图5-8所示。
图5-8
我们再看一个例子(参考范例程序left.py):
str1 = "Do one thing at a time!" str2 = str1[13:] str_w = len(str2) #取得字符串长度 print("读取的字符串=“{}”,长度:{}".format(str2,str_w))
程序的执行结果如图5-9所示。
图5-9
表5-5列出的是一些与字母大小写有关的方法。
表5-5
具体用法可参考下面的范例程序。
【范例程序:upper.py】字母大小写转换与首字母大写
01 str1="The first wealth is health." 02 print(str1.upper()) 03 print(str1.lower()) 04 print("health.".capitalize())
程序的执行结果如图5-10所示。
图5-10
如果想要知道字符串是否全部是大写或全部是小写,可以调用isupper()或islower()方法来查询,例如:
str= "girl" s=str.islower() #执行结果:True
使用isupper()或islower()方法查询时,只要字符串中有大小写字母掺杂,得到的结果都会是False。
在进行数据分析的时候常常需要计算特定字符串出现的次数,Python提供了count()方法,格式如下:
目标字符串.count(特定字符串[, 开始下标[, 结束下标]])
开始下标与结束下标可省略,表示搜索整个目标字符串。
【范例程序:count.py】搜索特定字符串出现的次数
01 str1="Never say Never! Never say Impossible!" 02 str2="浪花有意千重雪,桃李无言一队春。\n一壶酒,一竿纶,世上如侬有几人?" 03 s1=str1.count("Never",15) 04 s2=str1.count("e",0,3) 05 s3=str2.count("一") 06 print("{}\n“Never”出现{}次,“e”出现{}次".format(str1,s1,s2)) 07 print("\n{}\n“一”出现{}次".format(str2,s3))
程序的执行结果如图5-11所示。
图5-11
第03行程序从str1字符串下标15的位置开始搜索,第04行则是搜索str1从下标值0到下标值2(3-1)的位置,第5行搜索整个str2字符串。
函数strip()用于删除字符串首尾的字符,lstrip()用于删除左边的字符,rstrip()用于删除右边的字符,三种方法的格式相同。下面以strip()来进行说明:
字符串.strip([特定字符])
特定字符默认为空格符,特定字符可以输入多个,例如(参考范例程序strip.py):
str1="Never say Never!" s1=str1.strip("N!") print(s1)
程序的执行结果如图5-12所示。
图5-12
由于传入的参数是("N!"),相当于要删除“N”与“!”,执行时会按序删除两端匹配的字符,直到没有匹配的字符为止,所以上面的范例分别删除了左边的“N”与右边的“!”字符。
strip()、lstrip()与rstrip()方法用来删除字符串“左右”两边的字符,并不是删除整个字符串内匹配的字符。
函数replace()可以将字符串中的特定字符串替换成新的字符串,格式如下:
字符串.replace(原字符串, 新字符串[, 替换次数])
例如(参考范例程序replace.py):
01 str= "Jennifer is a beautiful girl." 02 s=str.replace("Jennifer", "Joan") 03 str= "苹果可以做成苹果汁、苹果干、苹果色拉." 04 s=str.replace("苹果", "葡萄")
程序的执行结果如图5-13所示。
图5-13
find()方法用来查找指定的字符或字符串,返回第一个找到该字符或字符串时的下标编号,同样以下标编号来设置开始和结束的查找范围,不过开始下标及结束下标可省略。语法如下:
str.find(字符或字符串[,开始下标[,结束下标]])
例如(参考范例程序strfind.py):
word = '''We all look forward to the annual ball because it’s great time to dress up.''' print(word) print(word.find('all')) #寻找子字符串all,从下标编号0开始 print(word.find('all', 7)) #寻找子字符串all,从下标编号7开始
程序的执行结果如图5-14所示。
图5-14
index()方法用来返回指定字符的下标值,所以它的用法和find()函数非常接近,同样以下标编号来设置开始和结束的范围,语法如下:
str.index(字符或字符串[,开始下标[,结束下标]])
其中,字符或字符串参数就是要寻找的字符或字符串,若未找到,则返回错误值ValueError,这项参数不可省略,不过开始下标及结束下标可省略,例如(参考范例程序strindex.py):
wd = ''' A very low one. If you take away tipping, you run risk of losing good service. ''' print('字符串:', wd) print('字符串-you 下标值:', wd.find('you')) print('找不到字符串:', wd.find('yov')) print('字符串-one 下标值:', wd.index('one')) print('找不到字符串', wd.index('services'))
find()方法未找到指定的子字符串会返回-1。index()方法找不到指定子字符串则显示“ValueError”的错误信息,如图5-15所示。
图5-15
根据设置的范围判断指定的子字符串是否存在于原有字符串中,若存在,则返回True。startswith()方法用来对比前端的字符,endswith()方法则用来对比尾端的字符,其语法如下:
startswith(开头的字符[,开始下标[,结束下标]]) endswith(结尾的字符[,开始下标[,结束下标]])
开头的字符:表示字符串中开头的字符。
结尾的字符:表示字符串中结尾的字符。
开始下标、结束下标为可选项,可使用字符串切片的计算来设置要查询字符的下标值。
例如(参考范例程序startswith.py):
wd = 'Programming design' print('字符串:', wd) print('Prog?', wd.startswith('Prog')) #返回True print('gram?', wd.startswith('gram', 0)) #返回False print('de?', wd.startswith('de', 12)) #返回True print('ign?', wd.endswith('ign')) #返回True print('ing?', wd.endswith('ing', 0, 11)) #返回True
程序的执行结果如图5-16所示。
图5-16
如果未设置startswith()方法的开始下标和结束下标参数,这个方法就只会查找整句的开头文字是否匹配。若要查找第二个子句的开头字符是否匹配,调用startswith()方法时就要加入start或end参数。调用endswith()方法查找非句尾的末端字符时,同样要设置开始下标或结束下标的参数,endswith()方法才会按下标值进行查找。
下面的范例程序是打开一篇较长的文章(redcap.txt),它取自格林童话《小红帽》,我们试着从这篇文章中找出指定的关键词出现的次数。
Python内建有文本文件的函数,不需要import其他模块就可以调用。调用open()函数打开文件,第一个参数是文件名,第二个参数是使用文本文件的方法,这个函数的参数说明可参考表5-6。
表5-6
在下面的范例程序中,第05行指定了要搜索的文字列表,里面有三个字符串:grandmother、wolf以及Little Red-Cap,通过for循环配合count函数就能找出这些字符串在文章中出现了多少次。
【范例程序:redcap.py】在文本文件内查找特定字符串组合出现的次数
01 # -*- coding: utf-8 -*- 02 with open("redcap.txt", "r") as f: 03 story=f.read() #读出文件内容 04 05 words=["grandmother", "wolf", "Little Red-Cap"] 06 07 for w in words: 08 sc=story.count(w) 09 print("{} 出现了 {} 次".format(w,sc))
程序的执行结果如图5-17所示。
图5-17