Python字符串

Python字符串


前言

在 Python 开发过程中,经常需要对字符串进行一些特殊处理,比如拼接字符串、截取字符串、格式化字符串等,这些方法只需要开发者调用相应的字符串方法即可。

一、Python字符串拼接(包含字符串拼接数字)

1、字符串与字符串的拼接

在Python中,字符串与字符串的拼接方法有两种,一种简单的方法就是将两个字符串紧挨着写在一起,格式为:

strname = “str1” “str2”
strname 表示拼接以后的字符串变量名,str1 和 str2 是要拼接的字符串内容

例子为:

strings = "I" "love" "you"
print(strings)

运行结果为:Iloveyou

注意:这种方法只能拼接字符串常量,无法拼接字符串变量。

如果需要使用变量,就得借助”+“运算符来拼接,具体格式为:

strname = str1 + str2
注意+也能拼接字符串常量

str1= "Nice to meet you"
str2= "my girl"
str3= str1 + " l love you " +str2
print(str3)

运行结果为:Nice to meet you l love you my girl

2、字符串与数字的拼接

Python是不允许直接拼接数字和字符串的,所以我们必须先将数字转换成字符串。可以借助 str() 和 repr() 函数将数字转换为字符串,它们的使用格式为:

str(obj)
repr(obj)
obj 表示要转换的对象,它可以是数字、列表、元组、字典等多种类型的数据。

name = "我的名字叫小明"
age = 9
grade = 2
introduce= name + ",我已经" + str(age) + "岁了,现在读" + repr(grade) + "年级。"
print(introduce)

运行结果为:我的名字叫小明,我已经9岁了,现在读2年级。

str() 和 repr() 函数虽然都可以将数字转换成字符串,但它们之间是有区别的:

str() 和 repr() 的区别:

  • str() 用于将数据转换成适合人类阅读的字符串形式。
  • repr() 用于将数据转换成适合解释器阅读的字符串形式(Python 表达式的形式),适合在开发和调试阶段使用;如果没有等价的语法,则会发生 SyntaxError 异常。

同时,在 Python 交互式编程环境中输入一个表达式(变量、加减乘除、逻辑运算等)时,Python 会自动使用 repr() 函数处理该表达。式。

二、Python截取字符串(字符串切片)

1.获取单个字符

对于单个字符串,我们可以使用字符串索引截取单个字符。格式为:

strname[index]
strname 表示字符串名字,index 表示索引值。
字符串索引从左到右从0开始,从右到左从-1开始。

name = "我的名字叫小明"
#获取索引为2的字符
print(name[2])
#获取索引为 4 的字符
print(name[-3])

运行结果为:名 叫

2.获取多个字符(字符串截去/字符串切片)

对于字符串获取多个字符可以指定一个范围来获取多个字符,也就是一个子串或者片段,具体格式为:

strname[start : end : step]

  • strname:要截取的字符串;
  • start:表示要截取的第一个字符所在的索引(截取时包含该字符)。如果不指定,默认为 0,也就是从字符串的开头截取;
  • end:表示要截取的最后一个字符所在的索引(截取时不包含该字符)。如果不指定,默认为字符串的长度;
  • step:指的是从 start 索引处的字符开始,每 step 个距离获取一个字符,直至 end 索引出的字符。step 默认值为 1,当省略该值时,最后一个冒号也可以省略。
str1 = '我的名字叫小明,我今年17岁了,马上就要成年了'
#获取索引从3处12(不包含12)的子串
print(str1[3: 12]) # 输出 zy
#获取索引从7处到-6的子串
print(str1[5: -7]) # 输出 zyit.org is very
#获取索引从-7到6的子串
print(str1[-13: -6])
#从索引3开始,每隔4个字符取出一个字符,直到索引22为止
print(str1[3: 22: 4])

运行结果为:

字叫小明,我今年1
小明,我今年17岁了,
年17岁了,马
字,1,要

同时,start、end、step 三个参数都可以省略:

str1 = '我的名字叫小明,我今年17岁了,马上就要成年了'
#获取从索引8开始,直到末尾的子串
print(str1[8: ])
#获取从索引-15开始,直到末尾的子串
print(str1[-15: ])
#从开头截取字符串,直到索引14为止
print(str1[: 14])
#每隔3个字符取出一个字符
print(str1[:: 3])

结果为:

我今年17岁了,马上就要成年了
我今年17岁了,马上就要成年了
我的名字叫小明,我今年17岁
我字明今7,就年

三、Python len()函数:获取字符串长度或字节数

len()函数是获得一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节的函数。格式为:

len(string)

在实际开发中,除了常常要获取字符串的长度外,有时还要获取字符串的字节数。

在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小数点、下划线以及空格,各占一个字节,而一个汉字可能占 2~4 个字节,具体占多少个,取决于采用的编码方式。例如,汉字在 GBK/GB2312 编码中占用 2 个字节,而在 UTF-8 编码中一般占用 3 个字节。

我们可以通过使用 encode() 方法,将字符串进行编码后再获取它的字节数。格式为:

len(str.encode())
str为字符串名称

四、Python split()方法:分割字符串

split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。该方法的基本语法格式如下:

str.split(sep,maxsplit)

此方法中各部分参数的含义分别是:
str:表示要进行分割的字符串;
sep:用于指定分隔符,可以包含多个字符。此参数默认为 None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等。
maxsplit:可选参数,用于指定分割的次数,最后列表中子串的个数最多为 maxsplit+1。如果不指定或者指定为 -1,则表示分割次数没有限制。

在 split 方法中,如果不指定 sep 参数,那么也不能指定 maxsplit 参数。

str = "C语言中文网 >>> c.biancheng.net"
print(str)
list1 = str.split() #采用默认分隔符进行分割
print(list1)
list2 = str.split('>>>') #采用多个字符进行分割
print(list2)
list3 = str.split('.') #采用 . 号进行分割
print(list3)
list4 = str.split(' ',4) #采用空格进行分割,并规定最多只能分割成 4 个子串
print(list4)
list5 = str.split('>') #采用 > 字符进行分割
print(list5)
C语言中文网 >>> c.biancheng.net
['C语言中文网', '>>>', 'c.biancheng.net']
['C语言中文网 ', ' c.biancheng.net']
['C语言中文网 >>> c', 'biancheng', 'net']
['C语言中文网', '>>>', 'c.biancheng.net']
['C语言中文网 ', '', '', ' c.biancheng.net']

需要注意的是,在未指定 sep 参数时,split() 方法默认采用空字符进行分割,但当字符串中有连续的空格或其他空字符时,都会被视为一个分隔符对字符串进行分割.

str = "C语言中文网   >>>   c.biancheng.net"  #包含 3 个连续的空格
list6 = str.split()
print(list6)

运行结果为:['C语言中文网', '>>>', 'c.biancheng.net']

五、Python join()方法:合并字符串

该方法与 split() 方法刚好相反,用来将列表(或元组)中包含的多个字符串连接成一个字符串。格式为:

newstr = str.join(iterable)
newstr:表示合并后生成的新字符串;
str:用于指定合并时的分隔符;
iterable:做合并操作的源字符串数据,允许以列表、元组等形式提供。

list = ['www','taobao','com']
'.'.join(list)

运行结果为:'www.taobao.com'

六、Python count()方法:统计字符串出现的次数

count 方法用于检索指定字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回 0,否则返回出现的次数。

str.count(sub[,start[,end]])
str:表示原字符串;
sub:表示要检索的字符串;
start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;
end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。

str = "www.taobao.com"
str.count('.',2,-3)
str1 = "www.taobao.com"
str1.count('.',2,-4)

运行结果为:2 1
从结果来看,可以得知索引也是从0开始的,第一个统计从索引2位置开始检索到-3有2个“.”,第二个统计的第二个“.”不在检索范围内,所以返回结果为1。

七、Python find()方法:检测字符串中是否包含某子串

find() 方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回 -1。

str.find(sub[,start[,end]])
str:表示原字符串;
sub:表示要检索的目标字符串;
start:表示开始检索的起始位置。如果不指定,则默认从头开始检索;
end:表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。

str = "c.biancheng.net"
str.find('.')
str = "c.biancheng.net"
str.find('.',2)
str = "c.biancheng.net"
str.find('.',2,-4)

运行结果为:1 11 -1

Python 还提供了 rfind() 方法,与 find() 方法最大的不同在于,rfind() 是从字符串右边开始检索。

八、Python index()方法:检测字符串中是否包含某子串

在Python中,index() 方法也可以用于检索是否包含指定的字符串,不同之处在于,当指定的字符串不存在时,index() 方法会抛出异常。

str.index(sub[,start[,end]])
str:表示原字符串;
sub:表示要检索的子字符串;
start:表示检索开始的起始位置,如果不指定,默认从头开始检索;
end:表示检索的结束位置,如果不指定,默认一直检索到结尾。

九、Python字符串对齐方法(ljust()、rjust()和center())

从函数名称我们就可以了解清楚,这三个函数主要是对函数的左右以及居中等方式让字符串对齐,下表介绍了这三个函数。

函数名称功能及其解释
ljust()向指定字符串的右侧填充指定字符,从而达到左对齐文本的目的
rjust()和 ljust() 方法类似,唯一的不同在于,rjust() 方法是向字符串的左侧填充指定字符,从而达到右对齐文本的目的
center()与 ljust() 和 rjust() 的用法类似,但它让文本居中,而不是左对齐或右对齐

这三个函数的调用格式为:

S.ljust(width[, fillchar])
S.rjust(width[, fillchar])
S.center(width[, fillchar])

其中,各个参数的解释为:

  • S:表示要进行填充的字符串;
  • width:表示包括 S 本身长度在内,字符串要占的总长度;
  • fillchar:作为可选参数,用来指定填充字符串时所用的字符,默认情况使用空格。
    下面给出一个例子:
S = 'www.taobao.com'
print(S.center(25,'-'))

运行结果为:------www.taobao.com-----

十、Python startswith()和endswith()方法

这两个函数比较简单,分别用于检索字符串是否以指定字符串开头或者结尾,格式分别为:

str.startswith(sub[,start[,end]])
str.endswith(sub[,start[,end]])

  • str:表示原字符串;
  • sub:要检索的子串;
  • start:指定检索开始的起始位置索引,如果不指定,则默认从头开始检索;
  • end:指定检索的结束位置索引,如果不指定,则默认一直检索在结束。
    下面举个例子:
str = "www.taobao.com"
str.endswith("com")

运行结果为:True

十一、Python字符串大小写转换

在Python 中,为了方便对字符串中的字母进行大小写转换,字符串变量提供了 3 种方法,分别是 title()、lower() 和 upper()。

1. title()

在Python中,title()函数的功能为将字符串每个单词的字母转换为大写,其余字母转换为小写。

2. lower()

在Python中,lower()函数的功能为将字符串的每个大写字母转换为小写字母,实现小写的转换。

3.upper()

在Python中,upper()函数的功能为将字符串的每个小写字母转换为大写字母,实现大写的转换。

十二、Python去除字符串中空格(删除指定字符)的3种方法

在一些场景中,字符串前后不允许出现空格和特殊字符,此时就需要去除字符串中的空格和特殊字符。

这里的特殊字符,指的是制表符(\t)、回车符(\r)、换行符(\n)等。

1、strip():删除字符串前后(左右两侧)的空格或特殊字符。

该方法用于删除字符串左右两个的空格或者特殊字符,语法格式为:

str.strip([chars])

其中,str 表示原字符串,[chars] 用来指定要删除的字符,可以同时指定多个,如果不手动指定,则默认会删除空格以及制表符、回车符、换行符等特殊字符。
下面给出例子:

str = "  www.taobao.com \t\n\r"
print(str.strip())
str.strip(" ,\r")
print(str)

运行结果为:

www.taobao.com
  www.taobao.com 	

2、lstrip():删除字符串前面(左边)的空格或特殊字符。

lstrip() 方法用于去掉字符串左侧的空格和特殊字符。该方法的语法格式如下:

str.lstrip([chars])

其中,str 表示原字符串,[chars] 用来指定要删除的字符,可以同时指定多个,如果不手动指定,则默认会删除空格以及制表符、回车符、换行符等特殊字符。

下面给出例子:

str = "  www.taobao.com \t\n\r"
str.lstrip()

运行结果为:'www.taobao.com \t\n\r'

可以看出该函数只删除了字符串左边的特殊字符。

3、rstrip():删除字符串后面(右边)的空格或特殊字符。

该方法用于删除字符串右侧的空格和特殊字符,其语法格式为:

str.rstrip([chars])

其中,str 表示原字符串,[chars] 用来指定要删除的字符,可以同时指定多个,如果不手动指定,则默认会删除空格以及制表符、回车符、换行符等特殊字符。

下面给出例子:

str = "  www.taobao.com \t\n\r"
str.rstrip()

运行结果为:' www.taobao.com'

可以看出该方法只删除了字符串右边的特殊字符,左边的特殊字符没有处理。

十三、Python format()格式化输出方法

字符串类型(str)提供了 format() 方法对字符串进行格式化。format()方法的格式为:

str.format(args)

学习 format() 方法的难点,在于搞清楚 str 显示样式的书写格式。在创建显示样式模板时,需要使用{}和:来指定占位符,其完整的语法格式为:

{ [index][ : [ [fill] align] [sign] [#] [width] [.precision] [type] ] }

注意,格式中用 [] 括起来的参数都是可选参数,即可以使用,也可以不使用。各个参数的含义如下:

  • index:指定:后边设置的格式要作用到 args 中第几个数据,数据的索引值从 0 开始。如果省略此选项,则会根据 args 中数据的先后顺序自动分配。
  • fill:指定空白处填充的字符。注意,当填充字符为逗号(,)且作用于整数或浮点数时,该整数(或浮点数)会以逗号分隔的形式输出,例如(1000000会输出 1,000,000)。
  • align:指定数据的对齐方式,具体的对齐方式如表所示
align解释
<数据左对齐
>数据右对齐
=数据右对齐,同时将符号放置在填充内容的最左侧,该选项只对数字类型有效,
^数据居中,此选项需要和width参数一起使用
  • sign:指定有无符号数,此参数的值以及对应的含义如表所示。
sign参数含义
+正数前加正号,负数前加负号
-正数前不加正号,负数前加负号
“ ”正数前加空格,负数前加负号。
#对于二进制数、八进制数和十六进制数,使用此参数,各进制数前会分别显示 0b、0o、0x前缀;反之则不显示前缀。
  • width:指定输出数据时所占的宽度。
  • .precision:指定保留的小数位数。
  • type:指定输出数据的具体类型,如表所示。
type类型值含义
s对字符串类型格式化
d十进制整数
c将十进制整数自动转换成对应的Unicode字符
e或者E转换成科学计数法后,在格式化输出。
g或者G自在e或者f(或者E和F)中转换。
b将十进制数自动转换成二进制表示,在格式化输出。
o将十进制数自动转换成八进制表示,在格式化输出。
x或者X将十进制数自动转换成十六进制表示,在格式化输出。
f或者F转换为浮点数(默认小数点后保留6位),在格式化输出。
%显示百分比(默认显示小数点后6位)

根据上述描述。我们举个例子:

str="网站名称:{:>6s}\t网址:{:s}"
print(str.format("淘宝网","www.taobao.com"))

运行结果为:网站名称: 淘宝网 网址:www.taobao.com

有时候,开发中,数值类型有多种显示需求,比如货币形式、百分比形式等,使用 format() 方法可以将数值格式化为不同的形式。

#以货币形式显示
print("货币形式:{:,d}".format(1000000))
#科学计数法表示
print("科学计数法:{:E}".format(1200.12))
#以十六进制表示
print("100的十六进制:{:#x}".format(100))
#输出百分比形式
print("0.01的百分比表示:{:.0%}".format(0.01))

运行结果为:

货币形式:1,000,000
科学计数法:1.200120E+03
100的十六进制:0x64
0.01的百分比表示:1%

十四、Python encode()和decode()方法:字符串编码转换

encode() 方法为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也称为“编码”。

encode() 方法的语法格式如下:

str.encode([encoding=“utf-8”][,errors=“strict”])

注意,格式中用 [] 括起来的参数为可选参数。

该方法各个参数的含义如表所示。

参数含义
str表示要进行转换的字符串
encoding=“utf-8”指定进行编码时采用的字符编码,选项默认采用utf-8编码,方法中只使用这一个参数时,可以省略前边的“encoding=”,直接写编码格式,例如 str.encode(“UTF-8”)。

注意,使用 encode() 方法对原字符串进行编码,不会直接修改原字符串,如果想修改原字符串,需要重新赋值。

str = "淘宝网"
str.encode()#默认utf-8编码
str = "淘宝网"
str.encode('GBK')#手动指定其它编码格式
b'\xe6\xb7\x98\xe5\xae\x9d\xe7\xbd\x91'
b'\xcc\xd4\xb1\xa6\xcd\xf8'

和 encode() 方法正好相反,decode() 方法用于将 bytes 类型的二进制数据转换为 str 类型,这个过程也称为“解码”。

decode() 方法的语法格式如下:

bytes.decode([encoding=“utf-8”][,errors=“strict”])

该方法各个参数的含义如表所示。

参数含义
btyes表示要进行转换的二进制数据。
encoding=“utf-8”指定进行编码时采用的字符编码,选项默认采用utf-8编码,方法中只使用这一个参数时,可以省略前边的“encoding=”,直接写编码格式,例如 str.encode(“UTF-8”)。注意,对 bytes 类型数据解码,要选择和当初编码时一样的格式。

下面举个例子:

str = "淘宝网"
bytes=str.encode()
bytes.decode()

运行结果为:'淘宝网'

注意,如果编码时采用的不是默认的 UTF-8 编码,则解码时要选择和编码时一样的格式,否则会抛出异常,例如:

str = "淘宝网"
bytes = str.encode("GBK")
bytes.decode()  #默认使用 UTF-8 编码,会抛出以下异常

运行结果为:

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-25-6e9c22276f44> in <module>

若采用编码时使用的格式就不会出错:

bytes.decode("GBK")
'淘宝网'

十五、Python dir()和help()帮助函数

前面已经描述了很多内容,但这不是字符串的全部,其他方法我们可以使用dir()和help()函数查询。

Python dir() 函数用来列出某个类或者某个模块中的全部内容,包括变量、方法、函数和类等,它的用法为:

dir(obj)
obj 表示要查看的对象。obj 可以不写,此时 dir() 会列出当前范围内的变量、方法和定义的类型。

Python help() 函数用来查看某个函数或者模块的帮助文档,它的用法为:

help(obj)
obj 表示要查看的对象。obj 可以不写,此时 help() 会进入帮助子程序。

总结

Where there is a will,there is a way.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值