字符串
字符串拼接(包含字符串拼接数字)
strname = "str1" "str2"
strname 表示拼接以后的字符串变量名,str1 和 str2 是要拼接的字符串内容。使用这种写法,Python 会自动将两个字符串拼接在一起。
需要注意的是,这种写法只能拼接字符串常量。
如果需要使用变量,就得借助+
运算符来拼接,具体格式为:
strname = str1 + str2
当然,+
运算符也能拼接字符串常量。
name = "C++教程"
url = "http://c.biancheng.net/cplus/"
info = name + "的网址是:" + url
print(info)
在很多应用场景中,我们需要将字符串和数字拼接在一起,而 Python 不允许直接拼接数字和字符串,所以我们必须先将数字转换成字符串。可以借助 str() 和 repr() 函数将数字转换为字符串,它们的使用格式为:
str(obj)
repr(obj)
obj 表示要转换的对象,它可以是数字、列表、元组、字典等多种类型的数据。
str() 和 repr() 的区别
str() 和 repr() 函数虽然都可以将数字转换成字符串,但它们之间是有区别的:
- str() 用于将数据转换成适合人类阅读的字符串形式。
- repr() 用于将数据转换成适合解释器阅读的字符串形式(Python 表达式的形式),适合在开发和调试阶段使用;如果没有等价的语法,则会发生 SyntaxError 异常。
name = "C语言中文网"
age = 8
course = 30
info = name + "已经" + str(age) + "岁了,共发布了" + repr(course) + "套教程。"
print(info)
索引与获取前面有提到,这里只介绍一下格式。
获取单个字符
知道字符串名字以后,在方括号[ ]
中使用索引即可访问对应的字符,具体的语法格式为:
strname[index]
获取多个字符(字符串截去/字符串切片)
使用[ ]
除了可以获取单个字符外,还可以指定一个范围来获取多个字符,也就是一个子串或者片段,具体格式为:
strname[start : end : step]
url = 'http://c.biancheng.net/java/'
#获取从索引5开始,直到末尾的子串
print(url[7: ])
#获取从索引-21开始,直到末尾的子串
print(url[-21: ])
#从开头截取字符串,直到索引22为止
print(url[: 22])
#每隔3个字符取出一个字符
print(url[:: 3])
len()函数
获取字符串长度或字节数。
len 函数的基本语法格式为:
len(string)
其中 string 用于指定要进行长度统计的字符串。
encode()函数
定义和用法
encode() 方法使用指定的编码对字符串进行编码。如果未指定编码,则将使用 UTF-8。
在实际开发中,除了常常要获取字符串的长度外,有时还要获取字符串的字节数。
在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小数点、下划线以及空格,各占一个字节,而一个汉字可能占 2~4 个字节,具体占多少个,取决于采用的编码方式。例如,汉字在 GBK/GB2312 编码中占用 2 个字节,而在 UTF-8 编码中一般占用 3 个字节。
我们可以通过使用 encode() 方法,将字符串进行编码后再获取它的字节数。例如,采用 UTF-8 编码方式,计算“人生苦短,我用Python”的字节数,可以执行如下代码:
>>> str1 = "人生苦短,我用Python"
>>> len(str1.encode())
27
因为汉字加中文标点符号共 7 个,占 21 个字节,而英文字母和英文的标点符号占 6 个字节,一共占用 27 个字节。
同理,如果要获取采用 GBK 编码的字符串的长度,可以执行如下代码:
>>> str1 = "人生苦短,我用Python"
>>> len(str1.encode('gbk'))
20
split() 函数
split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。该方法的基本语法格式如下:
str.split(sep,maxsplit)
此方法中各部分参数的含义分别是:
- str:表示要进行分割的字符串;
- sep:用于指定分隔符,可以包含多个字符。此参数默认为 None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等。
- maxsplit:可选参数,用于指定分割的次数,可以小于,最后列表中子串的个数最多为 maxsplit+1。如果不指定或者指定为 -1,则表示分割次数没有限制。
- 在 split 方法中,如果不指定 sep 参数,需要以
str.split(maxsplit=xxx)
的格式指定 maxsplit 参数。 同内建函数(如 len)的使用方式不同,字符串变量所拥有的方法,只能采用“字符串.方法名()”的方式调用。这里不用纠结为什么,学完类和对象之后,自然会明白。
>>> str = "C语言中文网 >>> c.biancheng.net"
>>> str
'C语言中文网 >>> c.biancheng.net'
>>> list1 = str.split() #采用默认分隔符进行分割
>>> list1
['C语言中文网', '>>>', 'c.biancheng.net']
>>> list2 = str.split('>>>') #采用多个字符进行分割
>>> list2
['C语言中文网 ', ' c.biancheng.net']
>>> list3 = str.split('.') #采用 . 号进行分割
>>> list3
['C语言中文网 >>> c', 'biancheng', 'net']
>>> list4 = str.split(' ',4) #采用空格进行分割,并规定最多只能分割成 4 个子串
>>> list4
['C语言中文网', '>>>', 'c.biancheng.net']
>>> list5 = str.split('>') #采用 > 字符进行分割
>>> list5
['C语言中文网 ', '', '', ' c.biancheng.net']
>>>
在未指定 sep 参数时,split() 方法默认采用空字符进行分割,但当字符串中有连续的空格或其他空字符时,都会被视为一个分隔符对字符串进行分割.
join()函数
它是 split() 方法的逆方法,用来将列表(或元组)中包含的多个字符串连接成一个字符串。
使用 join() 方法合并字符串时,它会将列表(或元组)中多个字符串采用固定的分隔符连接在一起。例如,字符串“c.biancheng.net”就可以看做是通过分隔符“.”将 ['c','biancheng','net'] 列表合并为一个字符串的结果。
join() 方法的语法格式如下:
newstr = str.join(iterable)
此方法中各参数的含义如下:
- newstr:表示合并后生成的新字符串;
- str:用于指定合并时的分隔符;
- iterable:做合并操作的源字符串数据,允许以列表、元组等形式提供。
>>> list=['c','b','a']
>>> newstr='-'.join(list)
>>> newstr
'c-b-a'
count()函数
count 方法用于检索指定字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回 0,否则返回出现的次数
。
count 方法的语法格式如下:
str.count(sub[,start[,end]])
此方法中,各参数的具体含义如下:
- str:表示原字符串;
- sub:表示要检索的字符串;
- start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;
- end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。
>>> str1='abbba'
>>> str1.count('a')
2
>>> str1.count('a',1,3)
0
>>>
find()函数
find() 方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回 -1。
find() 方法的语法格式如下:
str.find(sub[,start[,end]])
此格式中各参数的含义如下:
- str:表示原字符串;
- sub:表示要检索的目标字符串;
- start:表示开始检索的起始位置。如果不指定,则默认从头开始检索;
- end:表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。
>>> str1='abbba'
>>> str1.find('a')
0
>>>
注意,Python 还提供了 rfind() 方法,与 find() 方法最大的不同在于,rfind() 是从字符串右边开始检索。
index()函数
同 find() 方法类似,index() 方法也可以用于检索是否包含指定的字符串,不同之处在于,当指定的字符串不存在时,index() 方法会抛出异常。
index() 方法的语法格式如下:
str.index(sub[,start[,end]])
此格式中各参数的含义分别是:
- str:表示原字符串;
- sub:表示要检索的子字符串;
- start:表示检索开始的起始位置,如果不指定,默认从头开始检索;
- end:表示检索的结束位置,如果不指定,默认一直检索到结尾。
同 find() 和 rfind() 一样,字符串变量还具有 rindex() 方法,其作用和 index() 方法类似,不同之处在于它是从右边开始检索。
ljust()、rjust() 和 center() 函数
这些方法的功能是向指定字符串的右侧填充指定字符,从而达到左对齐文本的目的。
ljust() 方法的基本格式如下:
S.ljust(width[, fillchar])
其中各个参数的含义如下:
- S:表示要进行填充的字符串;
- width:表示包括 S 本身长度在内,字符串要占的总长度;
- fillchar:作为可选参数,用来指定填充字符串时所用的字符,默认情况使用空格。
rjust() 和 ljust() 方法类似,唯一的不同在于,rjust() 方法是向字符串的左侧填充指定字符,从而达到右对齐文本的目的。
rjust() 方法的基本格式如下:
S.rjust(width[, fillchar])
其中各个参数的含义和 ljust() 完全相同,所以这里不再重复描述。
center() 字符串方法与 ljust() 和 rjust() 的用法类似,但它让文本居中,而不是左对齐或右对齐。
center() 方法的基本格式如下:
S.center(width[, fillchar])
其中各个参数的含义和 ljust()、rjust() 方法相同。
startswith()函数
startswith() 方法用于检索字符串是否以指定字符串开头,如果是返回 True;反之返回 False。此方法的语法格式如下:
str.startswith(sub[,start[,end]])
此格式中各个参数的具体含义如下:
- str:表示原字符串;
- sub:要检索的子串;
- start:指定检索开始的起始位置索引,如果不指定,则默认从头开始检索;
- end:指定检索的结束位置索引,如果不指定,则默认一直检索在结束。
endswith()函数
endswith() 方法用于检索字符串是否以指定字符串结尾,如果是则返回 True;反之则返回 False。该方法的语法格式如下:
str.endswith(sub[,start[,end]])
此格式中各参数的含义如下:
- str:表示原字符串;
- sub:表示要检索的字符串;
- start:指定检索开始时的起始位置索引(字符串第一个字符对应的索引值为 0),如果不指定,默认从头开始检索。
- end:指定检索的结束位置索引,如果不指定,默认一直检索到结束。
title()函数
title() 方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要被转换的字符,此方法会将字符串原封不动地返回。
title() 方法的语法格式如下:
str.title()
其中,str 表示要进行转换的字符串。
lower()函数·
lower() 方法用于将字符串中的所有大写字母转换为小写字母,转换完成后,该方法会返回新得到的字符串。如果字符串中原本就都是小写字母,则该方法会返回原字符串。
lower() 方法的语法格式如下:
str.lower()
其中,str 表示要进行转换的字符串。
upper()函数
upper() 的功能和 lower() 方法恰好相反,它用于将字符串中的所有小写字母转换为大写字母,和以上两种方法的返回方式相同,即如果转换成功,则返回新字符串;反之,则返回原字符串。
upper() 方法的语法格式如下:
str.upper()
其中,str 表示要进行转换的字符串。
strip()函数
strip() 方法用于删除字符串左右两个的空格和特殊字符,该方法的语法格式为:
str.strip([chars])
其中,str 表示原字符串,[chars] 用来指定要删除的字符,可以同时指定多个,如果不手动指定,则默认会删除空格以及制表符、回车符、换行符等特殊字符。
lstrip()函数
lstrip() 方法用于去掉字符串左侧的空格和特殊字符。该方法的语法格式如下:
str.lstrip([chars])
其中,str 和 chars 参数的含义,分别同 strip() 语法格式中的 str 和 chars 完全相同。
rstrip()函数
rstrip() 方法用于删除字符串右侧的空格和特殊字符,其语法格式为:
str.rstrip([chars])
str 和 chars 参数的含义和前面 2 种方法语法格式中的参数完全相同。
注意,Python 的 str 是不可变的(不可变的意思是指,字符串一旦形成,它所包含的字符序列就不能发生任何改变),因此这三个方法只是返回字符串前面或后面空白被删除之后的副本,并不会改变字符串本身。
format()函数
format() 方法的语法格式如下:
str.format(args)
此方法中,str 用于指定字符串的显示样式;args 用于指定要进行格式转换的项,如果有多项,之间有逗号进行分割。
学习 format() 方法的难点,在于搞清楚 str 显示样式的书写格式。在创建显示样式模板时,需要使用{}
和:
来指定占位符,其完整的语法格式为:
{ [index][ : [ [fill] align] [sign] [#] [width] [.precision] [type] ] }
注意,格式中用 [] 括起来的参数都是可选参数,即可以使用,也可以不使用。各个参数的含义如下:
- index:指定:后边设置的格式要作用到 args 中第几个数据,数据的索引值从 0 开始。如果省略此选项,则会根据 args 中数据的先后顺序自动分配。
- fill:指定空白处填充的字符。注意,当填充字符为逗号(,)且作用于整数或浮点数时,该整数(或浮点数)会以逗号分隔的形式输出,例如(1000000会输出 1,000,000)。
- align:指定数据的对齐方式,具体的对齐方式如表 1 所示。 表 1 align 参数及含义
align | 含义 |
< | 数据左对齐。 |
> | 数据右对齐。 |
= | 数据右对齐,同时将符号放置在填充内容的最左侧,该选项只对数字类型有效。 |
^ | 数据居中,此选项需和 width 参数一起使用。 |
- sign:指定有无符号数,此参数的值以及对应的含义如表 2 所示。 表 2 sign 参数以含义
sign参数 | 含义 |
+ | 正数前加正号,负数前加负号。 |
- | 正数前不加正号,负数前加负号。 |
空格 | 正数前加空格,负数前加负号。 |
# | 对于二进制数、八进制数和十六进制数,使用此参数,各进制数前会分别显示 0b、0o、0x前缀;反之则不显示前缀。 |
- width:指定输出数据时所占的宽度。
- .precision:指定保留的小数位数。
- type:指定输出数据的具体类型,如表 3 所示。 表 3 type 占位符类型及含义
type类型值 | 含义 |
s | 对字符串类型格式化。 |
d | 十进制整数。 |
c | 将十进制整数自动转换成对应的 Unicode 字符。 |
e 或者 E | 转换成科学计数法后,再格式化输出。 |
g 或 G | 自动在 e 和 f(或 E 和 F)中切换。 |
b | 将十进制数自动转换成二进制表示,再格式化输出。 |
o | 将十进制数自动转换成八进制表示,再格式化输出。 |
x 或者 X | 将十进制数自动转换成十六进制表示,再格式化输出。 |
f 或者 F | 转换为浮点数(默认小数点后保留 6 位),再格式化输出。 |
% | 显示百分比(默认显示小数点后 6 位)。 |
>>> print("0.01的百分比表示:{:.0%}".format(0.01))
0.01的百分比表示:1%
>>> print("huobi: {:,<+%}".format(0.01 ))
huobi: +1.000000%
>>>
encode()函数
encode() 方法为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也称为“编码”。
encode() 方法的语法格式如下:
str.encode([encoding="utf-8"][,errors="strict"])
注意,格式中用 [] 括起来的参数为可选参数,也就是说,在使用此方法时,可以使用 [] 中的参数,也可以不使用。
该方法各个参数的含义如表 1 所示。
表 1 encode()参数及含义
参数 | 含义 |
str | 表示要进行转换的字符串。 |
encoding = "utf-8" | 指定进行编码时采用的字符编码,该选项默认采用 utf-8 编码。例如,如果想使用简体中文,可以设置 gb2312。 当方法中只使用这一个参数时,可以省略前边的“encoding=”,直接写编码格式,例如 str.encode("UTF-8")。 |
errors = "strict" | 指定错误处理方式,其可选择值可以是:
|
注意,使用 encode() 方法对原字符串进行编码,不会直接修改原字符串,如果想修改原字符串,需要重新赋值。
decode()方法
和 encode() 方法正好相反,decode() 方法用于将 bytes 类型的二进制数据转换为 str 类型,这个过程也称为“解码”。
decode() 方法的语法格式如下:
bytes.decode([encoding="utf-8"][,errors="strict"])
该方法中各参数的含义如表 2 所示。
表 2 decode()参数及含义
参数 | 含义 |
bytes | 表示要进行转换的二进制数据。 |
encoding="utf-8" | 指定解码时采用的字符编码,默认采用 utf-8 格式。当方法中只使用这一个参数时,可以省略“encoding=”,直接写编码方式即可。 注意,对 bytes 类型数据解码,要选择和当初编码时一样的格式。 |
errors = "strict" | 指定错误处理方式,其可选择值可以是:
|
注意,如果编码时采用的不是默认的 UTF-8 编码,则解码时要选择和编码时一样的格式,否则会抛出异常,
其余的函数可以在帮助文档中寻找,不再赘述。