CH05_字符串常用方法
CH05_字符串常用方法
本章目标
- 掌握字符串常用方法的运用
python字符串常用方法概述
在了解字符串的基本使用之后,本章将介绍 Python 字符串类型常用的几个方法。
在 Python 开发过程中,经常需要对字符串进行一些特殊处理,比如拼接字符串、截取字符串、格式化字符串等,这些操作无需开发者自己设计实现,只需调用相应的字符串方法即可。
注意,本章所讲的字符串方法,和内置函数(如 len() )不同,它们是字符串类型(str)所特有的,因此这些字符串方法的调用方式也比较特殊。
python字符串常用方法详解
1.字符串拼接
在 Python 中拼接(连接)字符串很简单,可以直接将两个字符串紧挨着写在一起,具体格式为:
1 | strname = "str1" "str2" |
strname 表示拼接以后的字符串变量名,str1 和 str2 是要拼接的字符串内容。使用这种写法,Python 会自动将两个字符串拼接在一起。
【示例】以连续书写的形式拼接字符串:
1 | str1 = "Python教程" "https://os-guangchuang.gitee.io/note/" |
运行结果:
1 | Python教程https://os-guangchuang.gitee.io/note/ |
需要注意的是,这种写法只能拼接字符串常量。
如果需要使用变量,就得借助+运算符来拼接,具体格式为:
1 | strname = str1 + str2 |
当然,+运算符也能拼接字符串常量。
【示例】使用+运算符拼接字符串:
1 | name = "C++教程" |
运行结果:
1 | C++教程的网址是:https://os-guangchuang.gitee.io/note/ |
在很多应用场景中,我们需要将字符串和数字拼接在一起,而 Python 不允许直接拼接数字和字符串,所以我们必须先将数字转换成字符串。可以借助 str() 和 repr() 函数将数字转换为字符串,它们的使用格式为:
1 | str(obj) |
obj 表示要转换的对象,它可以是数字、列表、元组、字典等多种类型的数据。
请看下面的代码:
1 | name = "note笔记网" |
运行结果:
1 | note笔记网已经8岁了,共发布了30套教程。 |
str() 和 repr() 的区别
str() 和 repr() 函数虽然都可以将数字转换成字符串,但它们之间是有区别的:
- str() 用于将数据转换成适合人类阅读的字符串形式。
- repr() 用于将数据转换成适合解释器阅读的字符串形式(Python 表达式的形式),适合在开发和调试阶段使用;如果没有等价的语法,则会发生 SyntaxError 异常。
请看下面的例子:
1 | s = "https://os-guangchuang.gitee.io/note/" |
运行结果:
1 | <class 'str'> |
本例中,s 本身就是一个字符串,但是我们依然使用 str() 和 repr() 对它进行了转换。从运行结果可以看出,str() 保留了字符串最原始的样子,而 repr() 使用引号将字符串包围起来,这就是 Python 字符串的表达式形式。
另外,在 Python 交互式编程环境中输入一个表达式(变量、加减乘除、逻辑运算等)时,Python 会自动使用 repr() 函数处理该表达式。
2.截取字符串
从本质上讲,字符串是由多个字符构成的,字符之间是有顺序的,这个顺序号就称为索引(index)。Python 允许通过索引来操作字符串中的单个或者多个字符,比如获取指定索引处的字符,返回指定字符的索引值等。
获取单个字符串
知道字符串名字以后,在方括号[ ]
中使用索引即可访问对应的字符,具体的语法格式为:
1 | strname[index] |
strname 表示字符串名字,index 表示索引值。
Python 允许从字符串的两端使用索引:
- 当以字符串的左端(字符串的开头)为起点时,索引是从 0 开始计数的;字符串的第一个字符的索引为 0,第二个字符的索引为 1,第三个字符串的索引为 2 ……
- 当以字符串的右端(字符串的末尾)为起点时,索引是从 -1 开始计数的;字符串的倒数第一个字符的索引为 -1,倒数第二个字符的索引为 -2,倒数第三个字符的索引为 -3 ……
请看下面的实例演示:
1 | url = 'https://os-guangchuang.gitee.io/note/' |
运行结果:
1 | - |
获取多个字符串
使用[ ]
除了可以获取单个字符外,还可以指定一个范围来获取多个字符,也就是一个子串或者片段,具体格式为:
1 | strname[start : end : step] |
对各个部分的说明:
- strname:要截取的字符串;
- start:表示要截取的第一个字符所在的索引(截取时包含该字符)。如果不指定,默认为 0,也就是从字符串的开头截取;
- end:表示要截取的最后一个字符所在的索引(截取时不包含该字符)。如果不指定,默认为字符串的长度;
- step:指的是从 start 索引处的字符开始,每 step 个距离获取一个字符,直至 end 索引出的字符。step 默认值为 1,当省略该值时,最后一个冒号也可以省略。
【实例1】基本用法:
1 | url = 'https://os-guangchuang.gitee.io/note/' |
运行结果:
1 | /os-guangchuang |
【实例2】高级用法,start、end、step 三个参数都可以省略:
1 | url = 'https://os-guangchuang.gitee.io/note/' |
运行结果:
1 | /os-guangchuang.gitee.io/note/ |
3.len():获取长度
Python 中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用 len 函数。
len 函数的基本语法格式为:
1 | len(string) |
其中 string 用于指定要进行长度统计的字符串。
例如,定义一个字符串,内容为“https://os-guangchuang.gitee.io/note/”,然后用 len() 函数计算该字符串的长度,执行代码如下:
1 | a="https://os-guangchuang.gitee.io/note/" |
在实际开发中,除了常常要获取字符串的长度外,有时还要获取字符串的字节数。
在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小数点、下划线以及空格,各占一个字节,而一个汉字可能占 2~4 个字节,具体占多少个,取决于采用的编码方式。例如,汉字在 GBK/GB2312 编码中占用 2 个字节,而在 UTF-8 编码中一般占用 3 个字节。
以 UTF-8 编码为例,字符串“人生苦短,我用Python”所占用的字节数如图 1 所示。
我们可以通过使用 encode() 方法,将字符串进行编码后再获取它的字节数。例如,采用 UTF-8 编码方式,计算“人生苦短,我用Python”的字节数,可以执行如下代码:
1 | "人生苦短,我用Python" str1 = |
因为汉字加中文标点符号共 7 个,占 21 个字节,而英文字母和英文的标点符号占 6 个字节,一共占用 27 个字节。
同理,如果要获取采用 GBK 编码的字符串的长度,可以执行如下代码:
1 | "人生苦短,我用Python" str1 = |
4.split():分割字符串
split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。该方法的基本语法格式如下:
1 | str.split(sep,maxsplit) |
此方法中各部分参数的含义分别是:
- str:表示要进行分割的字符串;
- sep:用于指定分隔符,可以包含多个字符。此参数默认为 None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等。
- maxsplit:可选参数,用于指定分割的次数,最后列表中子串的个数最多为 maxsplit+1。如果不指定或者指定为 -1,则表示分割次数没有限制。
然后用 split() 方法根据不同的分隔符进行分隔,执行过程如下:
1 | str = "note笔记网 >>> https://os-guangchuang.gitee.io/note/" |
运行结果:
1 | 原字符串:note笔记网 >>> https://os-guangchuang.gitee.io/note/ |
5.join():合并字符串
join() 方法也是非常重要的字符串方法,它是 split() 方法的逆方法,用来将列表(或元组)中包含的多个字符串连接成一个字符串。
使用 join() 方法合并字符串时,它会将列表(或元组)中多个字符串采用固定的分隔符连接在一起。例如,字符串“c.biancheng.net”就可以看做是通过分隔符“.”将 [‘c’,’biancheng’,’net’] 列表合并为一个字符串的结果。
join() 方法的语法格式如下:
1 | newstr = str.join(iterable) |
此方法中各参数的含义如下:
- newstr:表示合并后生成的新字符串;
- str:用于指定合并时的分隔符;
- iterable:做合并操作的源字符串数据,允许以列表、元组等形式提供。
【例 1】将列表中的字符串合并成一个字符串。
1 | list = ['aa','bb','cc'] |
【例 2】将元组中的字符串合并成一个字符串。
1 | dir = '','usr','bin','env' |
6.count():统计字符出现次数
count 方法用于检索指定字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回 0,否则返回出现的次数。
count 方法的语法格式如下:
1 | str.count(sub[,start[,end]]) |
此方法中,各参数的具体含义如下:
- str:表示原字符串;
- sub:表示要检索的字符串;
- start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;
- end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。
【例 1】检索字符串“https://os-guangchuang.gitee.io/note/”中“.”出现的次数。
1 | str = "https://os-guangchuang.gitee.io/note/" |
【例 2】检索字符串“https://www.baidu.com”中“.”出现的次数,且从指定索引开始。
1 | str = "https://www.baidu.com" |
【例 3】检索字符串“https://www.baidu.com”中“.”出现的次数,且指定开始和终止索引。
1 | str = "https://www.baidu.com" |
7.find():检测字符串中是否包含某子串
find() 方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回 -1。
find() 方法的语法格式如下:
1 | str.find(sub[,start[,end]]) |
此格式中各参数的含义如下:
- str:表示原字符串;
- sub:表示要检索的目标字符串;
- start:表示开始检索的起始位置。如果不指定,则默认从头开始检索;
- end:表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。
【例 1】用 find() 方法检索 “www.baidu.com” 中首次出现 “.” 的位置索引。
1 | str = "www.baidu.com" |
【例 2】手动指定起始索引的位置。
1 | str = "www.baidu.com" |
【例 3】手动指定起始索引和结束索引的位置。
1 | str = "www.baidu.com" |
注意,Python 还提供了 rfind() 方法,与 find() 方法最大的不同在于,rfind() 是从字符串右边开始检索。例如:
1 | str = "www.baidu.com" |
8.index():检测字符串中是否包含某子串
index() 方法的语法格式如下:
1 | str.index(sub[,start[,end]]) |
此格式中各参数的含义分别是:
- str:表示原字符串;
- sub:表示要检索的子字符串;
- start:表示检索开始的起始位置,如果不指定,默认从头开始检索;
- end:表示检索的结束位置,如果不指定,默认一直检索到结尾。
【例 1】用 index() 方法检索“www.baidu.com”中首次出现“.”的位置索引。
1 | str = "www.baidu.com" |
【例 2】当检索失败时,index()会抛出异常。
1 | str = "www.baidu.com" |
同 find() 和 rfind() 一样,字符串变量还具有 rindex() 方法,其作用和 index() 方法类似,不同之处在于它是从右边开始检索,例如:
1 | str = "www.baidu.com" |
9.字符串对齐方法
ljust()方法
ljust() 方法的功能是向指定字符串的右侧填充指定字符,从而达到左对齐文本的目的。
ljust() 方法的基本格式如下:
1 | S.ljust(width[, fillchar]) |
其中各个参数的含义如下:
- S:表示要进行填充的字符串;
- width:表示包括 S 本身长度在内,字符串要占的总长度;
- fillchar:作为可选参数,用来指定填充字符串时所用的字符,默认情况使用空格。
【例 1】
1 | addr1 = 'http://www.baidu.com' |
输出结果:
1 | http://www.baidu.com |
注意,该输出结果中除了明显可见的网址字符串外,其后还有空格字符存在,每行一共 25 个字符长度。
【例 2】
1 | addr1 = 'http://www.baidu.com' |
输出结果:
1 | http://www.baidu.com----- |
此程序和例 1 的唯一区别是,填充字符从空格改为‘-’。
rjust()方法
rjust() 和 ljust() 方法类似,唯一的不同在于,rjust() 方法是向字符串的左侧填充指定字符,从而达到右对齐文本的目的。
rjust() 方法的基本格式如下:
1 | S.rjust(width[, fillchar]) |
【例 3】
1 | addr1 = 'http://www.baidu.com' |
输出结果:
1 | http://www.baidu.com |
【例 4】
1 | addr1 = 'http://www.baidu.com' |
输出结果:
1 | -----http://www.baidu.com |
center()方法
center() 字符串方法与 ljust() 和 rjust() 的用法类似,但它让文本居中,而不是左对齐或右对齐。
center() 方法的基本格式如下:
1 | S.center(width[, fillchar]) |
【例 5】
1 | addr1 = 'http://www.baidu.com' |
输出结果:
1 | http://www.baidu.com |
【例 6】
1 | addr1 = 'http://www.baidu.com' |
输出结果:
1 | ---http://www.baidu.com-- |
10.startswith()和endswith()
startswith()方法
startswith() 方法用于检索字符串是否以指定字符串开头,如果是返回 True;反之返回 False。此方法的语法格式如下:
1 | str.startswith(sub[,start[,end]]) |
此格式中各个参数的具体含义如下:
- str:表示原字符串;
- sub:要检索的子串;
- start:指定检索开始的起始位置索引,如果不指定,则默认从头开始检索;
- end:指定检索的结束位置索引,如果不指定,则默认一直检索在结束。
【例 1】判断“www.baidu.com”是否以“w”子串开头。
1 | str = "www.baidu.com" |
【例 2】
1 | str = "www.baidu.comt" |
【例 3】从指定位置开始检索。
1 | str = "www.baidu.com" |
endswith()方法
endswith() 方法用于检索字符串是否以指定字符串结尾,如果是则返回 True;反之则返回 False。该方法的语法格式如下:
1 | str.endswith(sub[,start[,end]]) |
此格式中各参数的含义如下:
- str:表示原字符串;
- sub:表示要检索的字符串;
- start:指定检索开始时的起始位置索引(字符串第一个字符对应的索引值为 0),如果不指定,默认从头开始检索。
- end:指定检索的结束位置索引,如果不指定,默认一直检索到结束。
【例 4】检索“www.baidu.com”是否以“com”结束。
1 | str = "www.baidu.com" |
11.字符串大小写转换
title()方法
title() 方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要被转换的字符,此方法会将字符串原封不动地返回。
title() 方法的语法格式如下:
1 | str.title() |
其中,str 表示要进行转换的字符串。
【例 1】
1 | str = "www.baidu.com" |
lower()方法
lower() 方法用于将字符串中的所有大写字母转换为小写字母,转换完成后,该方法会返回新得到的字符串。如果字符串中原本就都是小写字母,则该方法会返回原字符串。
lower() 方法的语法格式如下:
1 | str.lower() |
【例 2】
1 | str = "I LIKE C" |
upper()方法
upper() 的功能和 lower() 方法恰好相反,它用于将字符串中的所有小写字母转换为大写字母,和以上两种方法的返回方式相同,即如果转换成功,则返回新字符串;反之,则返回原字符串。
upper() 方法的语法格式如下:
【例 3】
1 | str = "i like C" |
需要注意的是,以上 3 个方法都仅限于将转换后的新字符串返回,而不会修改原字符串。
12.去除字符串中的空格
strip()方法
strip() 方法用于删除字符串左右两个的空格和特殊字符,该方法的语法格式为:
1 | str.strip([chars]) |
其中,str 表示原字符串,[chars] 用来指定要删除的字符,可以同时指定多个,如果不手动指定,则默认会删除空格以及制表符、回车符、换行符等特殊字符。
【例 1】
1 | str=" www.baidu.com\t\n\r" |
分析运行结果不难看出,通过 strip() 确实能够删除字符串左右两侧的空格和特殊字符,但并没有真正改变字符串本身。
lstrip()方法
lstrip() 方法用于去掉字符串左侧的空格和特殊字符。该方法的语法格式如下:
1 | str.lstrip([chars]) |
其中,str 和 chars 参数的含义,分别同 strip() 语法格式中的 str 和 chars 完全相同。
【例 2】
1 | str=" www.baidu.com\t\n\r" |
rstrip()方法
rstrip() 方法用于删除字符串右侧的空格和特殊字符,其语法格式为:
1 | str.rstrip([chars]) |
str 和 chars 参数的含义和前面 2 种方法语法格式中的参数完全相同。
【例 3】
1 | str = " www.baidu.com \t\n\r" |
13.格式化输出
format() 方法的语法格式如下:
1 | str.format(args) |
此方法中,str 用于指定字符串的显示样式;args 用于指定要进行格式转换的项,如果有多项,之间有逗号进行分割。
学习 format() 方法的难点,在于搞清楚 str 显示样式的书写格式。在创建显示样式模板时,需要使用{}
和:
来指定占位符,其完整的语法格式为:
注意,格式中用 [] 括起来的参数都是可选参数,即可以使用,也可以不使用。各个参数的含义如下:
index:指定:后边设置的格式要作用到 args 中第几个数据,数据的索引值从 0 开始。如果省略此选项,则会根据 args 中数据的先后顺序自动分配。
fill:指定空白处填充的字符。注意,当填充字符为逗号(,)且作用于整数或浮点数时,该整数(或浮点数)会以逗号分隔的形式输出,例如(1000000会输出 1,000,000)。
align:指定数据的对齐方式,具体的对齐方式如表 1 所示。
sign:指定有无符号数,此参数的值以及对应的含义如表 2 所示。
width:指定输出数据时所占的宽度。
.precision:指定保留的小数位数。
type:指定输出数据的具体类型,如表 3 所示。
【例 1】
1 | str="网站名称:{:>9s}\t网址:{:s}" |
输出结果:
1 | 网站名称: Note笔记网 网址:https://os-guangchuang.gitee.io/note/ |
【例 2】
在实际开发中,数值类型有多种显示需求,比如货币形式、百分比形式等,使用 format() 方法可以将数值格式化为不同的形式。
1 | #以货币形式显示 |
输出结果:
1 | 货币形式:1,000,000 |
14.字符串编码格式转换
encode()方法
encode() 方法为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也称为“编码”。
encode() 方法的语法格式如下:
1 | str.encode([encoding="utf-8"][,errors="strict"]) |
注意,格式中用 [] 括起来的参数为可选参数,也就是说,在使用此方法时,可以使用 [] 中的参数,也可以不使用。
该方法各个参数的含义如表 1 所示。
注意,使用 encode() 方法对原字符串进行编码,不会直接修改原字符串,如果想修改原字符串,需要重新赋值。
【例 1】将 str 类型字符串“note笔记网”转换成 bytes 类型。
1 | str="note笔记网" |
此方式默认采用 UTF-8 编码,也可以手动指定其它编码格式,例如:
1 | str="note笔记网" |
decode()方法
和 encode() 方法正好相反,decode() 方法用于将 bytes 类型的二进制数据转换为 str 类型,这个过程也称为“解码”。
decode() 方法的语法格式如下:
1 | bytes.decode([encoding="utf-8"][,errors="strict"]) |
该方法中各参数的含义如表 2 所示。
【例 2】
1 | str="note笔记网" |
注意,如果编码时采用的不是默认的 UTF-8 编码,则解码时要选择和编码时一样的格式,否则会抛出异常,例如:
1 | str="note笔记网" |
15.dir()和help()函数
dir()方法
Python dir() 函数用来列出某个类或者某个模块中的全部内容,包括变量、方法、函数和类等,它的用法为:
1 | dir(obj) |
obj 表示要查看的对象。obj 可以不写,此时 dir() 会列出当前范围内的变量、方法和定义的类型。
【实例】使用 dir() 查看字符串类型(str)支持的所有方法:
1 | dir(str) |
在 Python 标准库中,以__
开头和结尾的方法都是私有的,不能在类的外部调用。
help()方法
Python help() 函数用来查看某个函数或者模块的帮助文档,它的用法为:
1 | help(obj) |
obj 表示要查看的对象。obj 可以不写,此时 help() 会进入帮助子程序。
【实例】使用 help() 查看 str 类型中 lower() 函数的用法:
1 | help(str.lower) |
可以看到,lower() 函数用来将字符串中的字母转换为小写形式,并返回一个新的字符串。
注意,使用 help() 查看某个函数的用法时,函数名后边不能带括号,例如将上面的命令写作help(str.lower())
就是错误的。
课后作业
1.略