前言
字符串是所有编程语言在项目开发过程中涉及最多的一个内容。大部分项目的运行结果,都需要以文本的形式展示给客户,曾经有一位久经沙场的老程序员说过一句话:“开发一个项目,基本上就是在不断的处理字符串”。下面对Python中常用的字符串操作方法进行介绍。
一、拼接字符串
使用 “+” 运算符完成对多个字符串的拼接,并产生一个新的字符串对象。
代码示例如下图所示:
注意:字符串不允许直接与其他类型的数据拼接,否则会报错。
例如,使用下图的代码将字符串与数字拼接会产生报错:
如果要解决该问题,可以先将整数转为字符串,然后以拼接字符串的方法输出该内容。将整数转为字符串可以使用 str() 函数,修改后的代码及运行结果如下图所示:
二、计算字符串的长度
由于不同字符所占字节数不同,所以要计算字符串的长度,需要先了解各字符所占的字节数。在Python中,数字、英文、小数点、下划线和空格均占一个字节;一个汉字可能会占 2~4 个字节,具体占几个字节取决于采用的编码方式。汉字在 GBK/GB2312 编码中占 2 个字节,在 UTF-8 编码中占用 3 个字节。下面以 Python 默认的 UTF-8 编码为例进行说明,即一个汉字占 3 个字节,如下图所示:
在Python中,提供了 len() 函数计算字符串的长度,语法格式如下:
len(string)
其中,string 代表要统计长度的字符串。代码示例如下图所示:
从上面结果中可以看出,默认情况下,通过 len() 函数计算字符串的长度时,不区分英文、数字和汉字,所有字符都按一个字符计算。
但在实际开发中,有时需要获取字符串实际所占的字节数,即如果采用 UTF-8 编码,汉字占 3 个字节,采用 GBK 或者 GB2312 时,汉字占 2 个字节。这时,可以通过使用 encode() 方法(后面博客会讲到)进行编码后再获取字节数。例如,如果要获取采用 UTF-8 编码的字符串的长度,可以使用如下图所示代码:
运行结果中显示 27 个字节,是因为汉字加中文标点符号共 7 个,占 21 个字节,英文字母占 6 个字节,共 27 个字节。
如果要获取采用 GBK 编码的字符串长度,使用如下图代码:
结果显示 20 字节,是因为汉字加中文标点符号共 7 个,占 14 个字节,英文字母占 6 个字节,共 20 个字节。
三、截取字符串
由于字符串也属于序列,所以要截取字符串,可以采用切片方法实现。通过切片方法截取字符串的语法格式如下:
string[start : end : step]
参数说明:
- string:表示要截取的字符串。
- start:表示要截取的第一个字符的索引(包括该字符),如果不指定,则默认为 0。
- end:表示要截取的最后一个字符的索引(不包括该字符),如果不指定则默认为字符串的长度。
- step:表示切片的步长,如果省略,则默认为 1,当省略该步长时,最后一个冒号也可以省略。
字符串的索引同序列的索引是一样的,也是从 0 开始,并且每个字符占一个位置。如下图所示:
例如,定义一个字符串,应用切片方法截取不同长度的子字符串输出,代码如下:
song = '曾梦想仗剑走天涯,看一看世界的繁华'
song_1 = song[2] # 截取第3个字符
song_2 = song[7:] # 从第8个字符截取
song_3 = song[:4] # 从左边开始截取4个字符
song_4 = song[10:15] # 截取第11到第15个字符
print('原字符串:', song)
print(song_1)
print(song_2)
print(song_3)
print(song_4)
执行代码后,显示内容如下:
原字符串: 曾梦想仗剑走天涯,看一看世界的繁华
想
涯,看一看世界的繁华
曾梦想仗
一看世界的
四、分割、合并字符串
在Python中,字符串对象提供了分割和合并字符串的方法。分割字符串是把字符串分割为列表,而合并字符串是把列表合并为字符串,分割字符串和合并字符串可以看作是互逆操作。
1. 分割字符串
字符串对象的 split() 方法可以实现字符串分割,就是把一个字符串按照指定的分隔符切分为字符串列表。该列表的元素中,不包括分隔符。split() 方法的语法格式如下:
str.split(sep, maxsplit)
参数说明:
- str:表示要分割的字符串。
- sep:用于指定分隔符,可以包含多个字符,默认为 None(即所有空字符,比如空格、换行"\n"、制表符"\t") 。
- maxsplit:可选参数,用于指定分割的次数,如果不指定或者指定为 -1 ,则分割次数没有限制,否则返回结果列表的元素个数,个数最多为 maxsplit+1。
- 返回值:分隔后的字符串列表。该列表的元素是以分隔符为界限分割的字符串(不含分隔符),当该分隔符前面(或者与前一个分隔符之间)无内容时,将返回一个空字符串元素。
例如,指定一个字符串,然后应用 split() 方法根据不同的分隔符进行分割,代码如下:
a = 'CSDN开发社区网址 >>> https://www.csdn.net'
print('原字符串:', a)
print(a.split()) # 采用默认分隔符进行分割
print(a.split('>>>')) # 采用多个字符进行分割
print(a.split('.', maxsplit=1)) # 采用.分割,并且只分割一次
运行后结果如下:
原字符串: CSDN开发社区网址 >>> https://www.csdn.net
['CSDN开发社区网址', '>>>', 'https://www.csdn.net']
['CSDN开发社区网址 ', ' https://www.csdn.net']
['CSDN开发社区网址 >>> https://www', 'csdn.net']
2. 合并字符串
合并字符串与拼接字符串不同,它会将多个字符串采用固定的分隔符连接在一起。例如,字符串 “张三=李四=王五=赵六”,就可以看作是通过分隔符 “=” 将 [‘张三’, ‘李四’, ‘王五’, ‘赵六’] 列表中所有字符串合并为一个字符串的结果。
合并字符串可以使用字符串对象的 join() 方法实现,语法格式如下:
strnew = string.join(iterable)
参数说明:
- strnew:表示合并后生成的新字符串。
- string:字符串类型,用于指定合并时分隔符。
- iterable:可迭代对象,该迭代对象中的所有元素(字符串表示)将被合并为一个新的字符串。