购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.6 字符串的常用函数与方法

在编写程序的过程中要善用字符串函数,因为字符串函数非常重要而且很实用,由于与字符串有关的方法众多,有些方法来自于对象(object),有些方法则是由类提供的属性和方法。声明了字符串变量之后,就表示实现了str()类,而它的方法都能被声明的字符串对象使用,通过“.”(dot)运算符来调用对象的方法。

常用的函数包括计算字符串长度、替换字符串、查找字符串,甚至是比较两个字符串的函数,等等。下面介绍Python提供的一些用于字符串的函数与方法。

5.6.1 计算字符串的长度——len()函数

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.6.2 与字母大小写有关的方法

表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。

5.6.3 搜索特定字符串出现的次数——count()

在进行数据分析的时候常常需要计算特定字符串出现的次数,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字符串。

5.6.4 删除字符串左右两边特定的字符——strip()、lstrip()、rstrip()

函数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()方法用来删除字符串“左右”两边的字符,并不是删除整个字符串内匹配的字符。

5.6.5 字符串替换——replace()

函数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

5.6.6 查找字符串——find()与index()

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

5.6.7 startswith()方法与endswith()方法

根据设置的范围判断指定的子字符串是否存在于原有字符串中,若存在,则返回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 QKRPxlhsocEWXrHR1AZKFJA7lcrv2WeaxI4MpZQdMTIIeXxfTdsCe8HoG6vXgZHY

点击中间区域
呼出菜单
上一章
目录
下一章
×