Python字符串操作全解:拼接、截取、分割、格式化与编码转换

沈亦白
沈亦白
发布时间:2026-10-14 | 4人浏览过
原创

本文系统讲解Python中字符串的常规操作。涵盖使用+运算符拼接、利用len与encode计算字节长度、通过切片语法截取、split与join分割合并,以及find、index等检索方法。详细解析%与format两种格式化方式,并深入说明str与bytes类型的encode编码及decode解码转换机制,助您掌握核心技能。

拼接字符串

  • 利用“+”运算符可以将多个字符串连接起来,生成一个新的字符串对象。
  • 需要注意的是,字符串类型不能直接与数字等其他数据类型进行拼接操作。
  • 若需将其他类型数据与字符串拼接,必须先使用str()函数将其转换为字符串类型。

str1 = 'Hello World'
str2 = '你好,世界'
print(str1+str2)
num = 2021
print(str1+str2+str(num))

计算字符串长度

由于不同字符占用的字节数存在差异,计算字符串长度前需明确字符编码规则。在Python中,数字、英文字母、小数点、下划线及空格均占用1个字节;汉字占用的字节数通常为2至4个,具体取决于编码方式。例如,在GBK或GB2312编码中,一个汉字占2个字节;而在UTF-8或Unicode编码中,通常占用3或4个字节。Python默认采用UTF-8编码,因此一般一个汉字占用3个字节。


str1 = '人生苦短,我用python!'
print(len(str1))             #结果为14

默认情况下,len()函数计算字符串长度时不区分英文、数字或汉字,将所有字符均视为1个字符进行计数。

注:

在实际开发中,若需获取字符串实际占用的字节数,可先使用encode()方法指定编码格式,再计算其长度。


str1 = '人生苦短,我用python!'
print(len(str1.encode()))      #UTF-8结果为28
print(len(str1.encode('gbk'))) #gbk结果为21

截取字符串

语法格式:string[start : end : step]

string:表示需要截取的原始字符串;

start:表示截取的起始索引(包含该位置的字符),若未指定则默认为0;

end:表示截取的结束索引(不包含该位置的字符),若未指定则默认为字符串长度;

step:表示切片的步长,若省略则默认为1;

进行截取操作时,若指定的索引超出字符串范围,程序将抛出异常。


programer_1 = '你知道我的生日吗?'  # 程序员甲问程序员乙的台词
print('程序员甲说:',programer_1)  # 输出程序员甲的台词
programer_2 = '输入你的身份证号码。' # 程序员乙的台词
print('程序员乙说:',programer_2)  # 输出程序员乙的台词
idcard = '123456199006277890'  # 定义保存身份证号码的字符串
print('程序员甲说:',idcard)  # 程序员乙说出身份证号码
birthday = idcard[6:10] + '年' + idcard[10:12] + '月' + idcard[12:14] + '日'   # 截取生日
print('程序员乙说:','你是' + birthday + '出生的,所以你的生日是' + birthday[5:]) # 输出程序员乙的生日

分割字符串

语法格式:string.split(sep,maxsplit)

string:指定需要分割的源字符串;

sep:指定分隔符,可包含多个字符,默认为None(即空字符,包括空格、换行符“\n”、制表符“\t”等);

maxsplit:可选参数,用于指定最大分割次数。若未指定或设为-1,则分割次数无限制;否则返回结果列表的元素个数最多为maxsplit+1;

该方法的返回值是一个字符串列表;


str1 = '分割一个字符串 >>> http://www.baidu.com'
print('原字符串:',str1)
list1 = str1.split()
list2 = str1.split('>>>')
list3 = str1.split('.')
list4 = str1.split(' ',4)  #用空格进行分割,只分割前4个空格
print(str(list1)+'\n'+str(list2)+'\n'str(list3)+'\n'str(list4))
list5 = str1.split('>')
print(list5)

合并字符串

语法格式:strnew = string.join(iterable)

strnew:表示合并后生成的新字符串;

string:字符串类型,用于指定合并时使用的分隔符;

iterable:可迭代对象,例如列表、字符串、元组等。


list_friend = ['扎克伯格','俞敏洪','马云','马化腾']  # 好友列表
str_friend = ' @'.join(list_friend)  # 用空格+@符号进行连接
at = '@'+str_friend  # 由于使用join()方法合并时,第一个元素前不加分隔符,所以需要在前面加上@符号
print('您要@的好友:',at)

检索字符串

语法格式:str.count(sub[,start[,end]])

用于统计指定子字符串在原字符串中出现的次数。

str:表示原字符串;

sub:表示需要检索的子字符串;

start:可选参数,表示检索范围的起始索引,若未指定则从头开始检索;

end:可选参数,表示检索范围的结束索引,若未指定则检索至末尾。

find()方法

语法格式:str.find(sub[,start[,end]])

用于检索字符串中是否包含指定的子字符串。

str:表示原字符串;

sub:表示需要检索的子字符串;

start:可选参数,表示检索范围的起始索引,若未指定则从头开始检索;

end:可选参数,表示检索范围的结束索引,若未指定则检索至末尾。

补充:

如果仅需判断子字符串是否存在,建议使用in关键字;若未找到,find()方法返回-1。若需从右向左查找,可使用rfind()方法。

index()方法

语法格式:str.index(sub[,start[,end]])

index()方法与find()类似,用于检索是否包含指定子字符串,区别在于若未找到会抛出异常。

str:表示原字符串;

sub:表示需要检索的子字符串;

start:可选参数,表示检索范围的起始索引,若未指定则从头开始检索;

end:可选参数,表示检索范围的结束索引,若未指定则检索至末尾。

startswith()方法

语法格式:str.startswith(sub[,start[,end]])

用于检索字符串是否以指定子字符串开头,若是返回True,否则返回False。

str:表示原字符串;

sub:表示需要检索的子字符串;

start:可选参数,表示检索范围的起始索引,若未指定则从头开始检索;

end:可选参数,表示检索范围的结束索引,若未指定则检索至末尾。

endswith()方法

语法格式:str.endswith(sub[,start[,end]])

用于检索字符串是否以指定子字符串结尾,若是返回True,否则返回False。

str:表示原字符串;

sub:表示需要检索的子字符串;

start:可选参数,表示检索范围的起始索引,若未指定则从头开始检索;

end:可选参数,表示检索范围的结束索引,若未指定则检索至末尾。

去除字符串中空格和特殊字符

strip()方法

用于去除字符串两侧(首尾)的空格和特殊字符。

lstrip()方法

用于去除字符串左侧(开头)的空格和特殊字符。

rstrip()方法

用于去除字符串右侧(结尾)的空格和特殊字符。

特殊字符指:

制表符\t、回车符\r、换行符\n等。

格式化字符串格式一

字符串格式化是指先定义一个包含占位符的模板,预留空位,随后填入相应内容。这些占位符在最终输出前不会显示。

使用“%”操作符

语法格式:'%[-][+][0][m][.n]格式化字符'%exp (注意别漏了单引号)

-:可选参数,用于指定左对齐,正数前方无符号,负数前面加负号;

+:可选参数,用于指定右对齐,正数前方加正号,负数前面加负号;

0:可选参数,表示右对齐,正数前方无符号,负数前方加负号,用0填充空白处(一般与m参数一起使用);

m:可选参数,表示占有宽度;

n:可选参数,表示小数点后保留的位数;

格式化字符:用于指定数据类型;

exp:要转换的项,若指定多个值,需通过元组传递,不能使用列表。

常用格式化字符串

实例


template = '编号:%09d\t公司名称: %s\t官网:http://www.%s.com' 
context1 = (7,'百度','baidu')
context2 = (8,'新浪','sina')
print(template%context1)
print(template%context2)

格式化字符串格式二(常用)

目前大多数场景已较少使用%方法,转而采用第二种format对象来实现格式化。

使用字符串对象的format()方法

语法格式:template.format(args)

template:用于指定字符串显示样式(即模板)的字符串;

args:用于指定要转换的项,若有多项,则用逗号进行分割。

创建模板时,需要使用“{}”和“:”指定占位符。

语法格式:{[index][:[[fill]align][sign][#][width][.precision][type]]}

index:可选参数,用于指定要设置格式的对象在参数列表中的索引位置;

fill:可选参数,指定空白处填充的字符;

align:可选参数,用于指定对齐方式(“<”:左对齐,“>”:右对齐,“=”:仅对数字有效的右对齐,“^”:表示居中,需与width一起使用);

width一起使用。

sign:可选参数,用于指定是否显示符号(正数、负数);

#:可选参数,对二进制、八进制和十六进制数,加上#会显示0b/0o/0x前缀;

width:可选参数,用于指定宽度;

.precision:可选参数,用于指定保留的小数位数;

type:可选参数,用于指定类型。

实例


import math        # 导入Python的数学模块
print('1251+3950的结果是(以货币形式显示):¥{:,.2f}元'.format(1251+3950)) # 以货币形式显示
print('{0:.1f}用科学计数法表示:{0:E}'.format(120000.1))    # 用科学计数法表示
print('π取5位小数:{:.5f}'.format(math.pi))     # 输出小数点后五位
print('{0:d}的16进制结果是:{0:#x}'.format(100))     # 输出十六进制数
print('天才是由 {:.0%} 的灵感,加上 {:.0%} 的汗水 。'.format(0.01,0.99))   # 输出百分比,并且不带小数

字符串编码转换

最早的字符串编码是美国标准信息交换码(ASCII),仅包含10个数字、26个大写英文字母、26个小写英文字母及一些其他符号。ASCII码最多只能表示256个符号,每个字符占1个字节。GBK和GB2312是我国制定的中文编码规则,使用1个字节表示英文字母,2个字节表示中文。UTF-8是国际通用编码,对全球各国所需字符进行了编码。UTF-8采用1个字节表示英文,3个字节表示中文。

在Python中,有两种常用的字符串类型,分别为str和bytes。其中str表示Unicode字符(即ASCII);bytes表示二进制数据。这两种类型的字符串不能直接拼接使用。通常情况下,str在内存中以Unicode表示,一个字符对应若干个字节。但在网络传输或保存到硬盘时,需要将str转换为字节类型,即bytes。

bytes类型的数据带有b前缀(使用单引号或双引号)。

例如:b'\xd2\xb0' 和 b'mr' 都是bytes类型。

str类型和bytes类型可以通过encode()和decode()方法进行相互转换。

使用encode()方法编码

encode()方法是str对象的方法,用于将字符串转换为二进制数据(即bytes),也称为“编码”。

语法格式:str.encode([encoding= “utf-8”][,errors= “strict”])

  • str:表示要进行转换的字符串;
  • encoding = “utf-8”:可选参数,用于指定转码时采用的字符编码,默认为UTF-8。若需使用简体中文,可设置为gb2312。当仅有此参数时,可省略“encoding=”,直接写编码值;
  • errors = “strict”:可选参数,用于指定错误处理方式,可选值包括strict(遇到非法字符抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML字符引用)等,默认值为strict。

实例


verse = '野渡无人舟自横'    
byte = verse.encode('GBK')  # 采用GBK编码转换为二进制,不处理异常
print('原字符串:',verse)    # 输出原字符串(没有改变)
print('转换后:',byte)    # 输出转换后的二进制数据,如果用UTF-8来转换呢?

使用decode()方法解码

decode()方法是bytes对象的方法,用于将二进制数据转换为字符串,即将encode()方法转换的结果还原为字符串,也称为“解码”。

语法格式:bytes.decode([encoding= “utf-8”][,errors= “strict”])

  • bytes:表示要进行转换的二进制数据,通常是encode()方法转换的结果;
  • encoding = “utf-8”:可选参数,用于指定转码时采用的字符编码,默认为UTF-8。若需使用简体中文,可设置为gb2312。当仅有此参数时,可省略“encoding=”,直接写编码值;
  • errors = “strict”:可选参数,用于指定错误处理方式,可选值包括strict(遇到非法字符抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML字符引用)等,默认值为strict。

实例


verse = '野渡无人舟自横'    
byte = verse.encode('GBK')  # 采用GBK编码转换为二进制,不处理异常
print('原字符串:',verse)    # 输出原字符串(没有改变)
print('转换后:',byte)    # 输出转换后的二进制数据,如果用UTF-8来转换呢?
print('解码后:',byte.decode('GBK'))  # 对二进制数据进行解码

总结

到此这篇关于Python字符串常规操作大全的文章就介绍到这了,更多相关Python字符串操作内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表