字符串是 Python 中常用数据类型。以下我们创建一个简单的字符串st1。
>>> st1 = 'abc123!'
>>> type(st1)
<class 'str'>
>>> dir(st1) #查看字符串里面的方法,对应可以使用help()查看每个方法的详情。
字符串拼接:
使用“+”进行拼接,定义了a、b、c三个变量。示例中a + ' & ' + b + c,注意 ' & ' 的符号&两边是有空格的,同时b + c是连接在一起的没有空格。
>>> a = 'hello'
>>> b = 'python'
>>> c = '!'
>>> a + ' & ' + b + c
'hello & python!'
>>>
格式化字符串 %s,同样定义a = 'i' 、b = 'love' 、 c = 'python' 三个变量。'%s %s %s' % (a,b,c),这里的3个%s 分别代表后边的a、b、c三个变量。注意%s与%s之间有个空格,所以 '%s %s %s' % (a,b,c) 的输出结果是 'i love python'
>>> a,b,c = 'i','love','python'
>>> '%s %s %s' % (a,b,c)
'i love python'
>>> '%s**%s**%s**' % (a,b,c) #占位符之间可以填充任何字符。
'i**love**python**'
>>>
使用自带方法 join()进行拼接,注意join()方法的括号里面只能放一个对象,所以定义的a、b、c三个变量需要用(a,b,c)括号括起来。中间插入的符号 "*#*"会添加在两个元素之间
>>> a,b,c = 'i','love','python'
>>> '*#*'.join((a,b,c))
'i*#*love*#*python'
>>>
使用方法format(),格式是 ' {} {} {}'.format(a,b,c),三个{}符号分别对应a、b、c三个对象,必须一 一对应;可以在 {}符号的前后以及中间填写元素,详情如下:
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> a=['a1','a2','a3']
>>> b=['b1','b2','b3']
>>> c=['c1','c2','c3']
>>> "*{} ** {} ** {}*".format(a,b,c) #三个{}{}{}符号对应a、b、c三个元素,可以在{}前后填充对象
"*['a1', 'a2', 'a3'] ** ['b1', 'b2', 'b3'] ** ['c1', 'c2', 'c3']*"
>>>
>>> "{2}{1}{0}".format(a,b,c) #可以在{}符号中间填写对象的索引
"['c1', 'c2', 'c3']['b1', 'b2', 'b3']['a1', 'a2', 'a3']"
>>>
>>> "{[1]} {[2]} {[0]}".format(a,b,c) #索引[1]指列表a=['a1','a2','a3']中的元素a2
'a2 b3 c1'
>>>
>>> "{[1][0]} {[2][0]} {[0][0]}".format(a,b,c) #索引[1][0],[1]指列表a=['a1','a2','a3']中对象'a2',[0]指对象'a2'里面的元素‘a’.
'a b c'
>>>
>>> "{0[0][1]} {2[2][1]} {1[1][1]}".format(a,b,c) #索引{0[0][1]},里面的"0"索引指的是format(a,b,c)的元素a,[0]指列表a=['a1','a2','a3']中的对象'a1',[1]指对象'a1'里面的元素‘1’.
'1 3 2'
>>>
字符串常用方法:
capitalize()方法:将字符串的第一个字符转换为大写。
>>> st1 = 'a1B2cdef!'
>>> st1.capitalize()
'A1b2cdef!'
>>>
center(width, [fillchar])方法:返回一个指定的宽度width居中的字符串,fillchar 为填充的字符,默认为空格。width指字符串的长度,如图中的20;[fillchar]之填充的字符串,[ ]是可选参数。
>>> st1
'a1B2cdef!'
>>> st1.center(20,'*')
'*****a1B2cdef!******'
>>>
count(sub[, start[, end]]) 方法:用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。sub之需要统计的字符,如 'a'; [, start[, end]]指开始与结束的索引,[ ]可选参数。
>>> st1 = 'a1a2a3Aa4a5'
>>> st1.count('a') #统计字符 'a' 在字符串st1里面出现的次数
5
>>> st1.count('a',3) #统计字符 'a' 在字符串st1里面的第三个元素开始到结尾出现的次数('2a3Aa4a5' )
3
>>> st1.count('a',3,7) #统计字符 'a' 在字符串st1里面的第三个元素开始到第7个元素出现的次数('2a3A'),可以去掉第三个元素,不能取到第7个元素。左闭右开。
1
>>>
encode(encoding='utf-8', errors='strict') 方法:以 encoding 指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案。
>>> st1
'a1a2a3Aa4a5'
>>> st1.encode('UTF-8','strict')
b'a1a2a3Aa4a5'
>>>
endswith(suffix[, start[, end]]) 方法:用于判断字符串是否以指定后缀结尾,如果是以指定的后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。
>>> st1
'a1a3a5Aa8a10'
>>> st1.endswith('0') #判断是否以字符 '0'结尾
True
>>> st1.endswith('a10') #判断是否以字符 'a10'结尾
True
>>> st1.endswith('a1tt0') #判断是否以字符 'a1tt0'结尾,明显是没有字符 'tt'
False
>>> st1.endswith('A',3,6) #判断字符串st1在第3个索引的元素以及到第6个索引的元素是否以字符 'A'结尾,字符串st1的索引6的值是取不到 'A'的,第7个索引才可以取到'A'
False
>>> st1.endswith('A',3,7)
True
>>>
find(sub[, start[, end]]) 方法:检测字符串中是否包含子字符 ,如:'a';如果指定 start(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
>>> st1 = 'b1a3a5Aa8a10'
>>> st1.find('a') #查找字符串st1中字符 'a'的索引值。
2
>>> st1.find('a',3) #查找字符串st1索引为3以后的元素('3a5Aa8a10') ,里面字符 'a'的索引值。
4
>>> st1.find('a',5,7) #查找字符串st1索引为5到索引为7以内的元素('5A'),是取不到索引为7的元素。
-1
>>> st1.find('a',5,8) ##查找字符串st1索引为5到索引为8以内的元素('5Aa')。
7
>>>
index(sub[, start[, end]]) 方法:和上面find()方法一样,只不过如果sub不在 string中会报一个异常。
>>> st1
'b1a3a5Aa8a10'
>>> st1.index('a') #查找字符 'a'的索引
2
>>> st1.index('a',5) #在字符串索引5以后的元素里面查找字符 'a'的索引('5Aa8a10')
7
>>> st1.index('a',0,3) #在字符串索引为0到3以内的元素里面查找字符 'a'的索引('b1a')
2
>>> st1.index('a',0,2) #在字符串索引为0到2以内的元素里面查找字符 'a'的索引('b1'),如果字符不在字符串中会报一个异常
Traceback (most recent call last):
File "<pyshell#128>", line 1, in <module>
st1.index('a',0,2)
ValueError: substring not found
>>>
isalnum()方法:字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False。
>>> a = 'aaa'
>>> a.isalnum()
True
>>> a = 'a1'
>>> a.isalnum()
True
>>> a = 'a1*' #里面有一个特殊字符 ' * '
>>> a.isalnum()
False
>>>
isalpha()方法:如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False
>>> a = 'abc' #字符串里面的元素全部是字母。
>>> a.isalpha()
True
>>> a = 'abc123'
>>> a.isalpha()
False
>>> a = 'abc!@#'
>>> a.isalpha()
False
>>>
isdigit() 方法:检测字符串是否只由数字组成。
>>> a = 'abc'
>>> a.isdigit()
False
>>> a = '123' #全是正整数
>>> a.isdigit()
True
>>> a = 'a1b1'
>>> a.isdigit()
False
>>> a = '1,2,1.4'
>>> a.isdigit()
False
>>> a = '-1'
>>> a.isdigit()
False
>>>
isidentifier()方法:检测字符串是否是字母开头
>>> a = 'a123'
>>> a.isidentifier()
True
>>> a = '1abc' #不是字母开头
>>> a.isidentifier()
False
>>>
islower() 方法:检测字符串是否由小写字母组成。
>>> a = 'abc123!' #全部是小写字符
>>> a.islower()
True
>>> a = 'abc123F'
>>> a.islower()
False
>>>
isnumeric()方法:判断字符串是否中只包含数字字符 。
>>> a = '123'
>>> a.isnumeric()
True
>>> a = 'a123b!'
>>> a.isnumeric()
False
>>>
isspace()方法: 判断字符串中只包含空格
>>> a = 'abc'
>>> a.isspace()
False
>>> a = 'a b c'
>>> a.isspace()
False
>>> a = ' '
>>> a
' '
>>> a.isspace()
True
>>>
istitle() 方法:检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。
>>> a = 'Abc1'
>>> a.istitle()
True
>>> a = 'Abc1d' #里面的字符有个 '1',这样会导致后边的字符 'd'被认为首字母是小写
>>> a.istitle()
False
>>> a = 'This Is String'
>>> a.istitle()
True
>>> a = 'Abc1d'
>>> a = 'Abc1Def' #同样这个字符里面也有 '1',但是后边的 'D'是大写。
>>> a.istitle()
True
>>>
isupper() 方法:检测字符串中所有的字母是否都为大写。
>>> a = 'ABCD' #全部为大写字母
>>> a.isupper()
True
>>> a = 'ABCD123!' #只判断字母,所以里面的 '123!'不影响结果
>>> a.isupper()
True
>>> a = 'ABCDefg'
>>> a.isupper()
False
>>>
join(iterable)方法:将序列中的元素以指定的字符连接生成一个新的字符串。
>>> a = 'abcd'
>>> '*1*'.join(a) #把字符 '*1*'添加到字符串 a中,依次插入每个元素
'a*1*b*1*c*1*d'
>>> a = 'a1','a2'
>>> '*1*'.join(a) #字符串不一样
'a1*1*a2'
>>> a = 'a','b','c','d'
>>> '-'.join(a)
'a-b-c-d'
>>>
ljust(width[, fillchar])方法:返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
>>> a.ljust(30) #返回的字符串后边多了很多'空格',因为width参数设置为30
'a2f '
>>> a.ljust(30,'$') #使用 '$'符号替换之前的空格
'a2f$$$$$$$$$$$$$$$$$$$$$$$$$$$'
>>> len(a.ljust(30)) #查看字符串是长度
30
lower()方法:转换字符串中所有大写字符为小写
>>> a = 'aA1BcdFg!'
>>> a.lower()
'aa1bcdfg!'
>>>
lstrip([chars])方法:截掉字符串左边的空格或指定字符后生成的新字符串。
>>> a = ' abc123!' #目前字符串的左边有空格
>>> a.lstrip()
'abc123!'
>>> a = 'abc123!'
>>> a.lstrip('ab') #截取掉字符串中指定的字符 'ab'
'c123!'
>>>
replace(old, new[, count])方法:把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
>>> a = 'aabbccdd'
>>> a.replace('aa','AA') #把小写的 'aa'替换成大写的 'AA'
'AAbbccdd'
>>> a #需要使用变量接,不会影响最终结果
'aabbccdd'
>>> a = 'aabbccddaaga'
>>> a.replace('a','A',3) #参数里面的 3,指提供3次
'AAbbccddAaga'
>>> a
'aabbccddaaga'
>>>
rfind(sub[, start[, end]])方法:返回字符串最后一次出现的位置(从右向左查询),如果没有匹配项则返回-1。
>>> a = 'ac1cddcd!'
>>> a.rfind('c') #查找字符 'c'
6
>>> a.rfind('c',1,4) #查找字符 'c',在字符串a中索引(1,4)里面找
3
>>> a.rfind('cc') #查找字符 'cc',结果是找不到的。
-1
>>>
rindex(sub[, start[, end]])方法: 返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常,你可以指定可选参数[beg:end]设置查找的区间。
>>> a
'ac1cddcd!'
>>> a.rindex('1') #查找字符 '1'的索引
2
>>> a.rindex('c',0,2) #查找字符 'c'的索引,在最开始到第二个索引位置里面的字符中搜索
1
>>> a.rindex('cc') #与rfind的区别是,没有匹配到字符后会报错。
Traceback (most recent call last):
File "<pyshell#60>", line 1, in <module>
a.rindex('cc')
ValueError: substring not found
>>>
rjust(width[, fillchar])方法:返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。
>>> a
'ac1cddcd!'
>>> a.rjust(20) #返回20个字符,默认使用 '空格' 占位
' ac1cddcd!'
>>> a.rjust(20,'$') ##返回20个字符,使用 '$' 占位
'$$$$$$$$$$$ac1cddcd!'
>>>
rpartition(sep) -> (head, sep, tail)方法:搜索一个字符,把他们分成三部分。
>>> a = 'ac1cddcd!'
>>> a.rpartition('c') #从最后一个 'c'开始分为三部分
('ac1cdd', 'c', 'd!')
>>> a = 'a1b2c2!!'
>>> a.rpartition('a') #字符 'a'前面没有其他字符,所以把没有的部分当成一个 ' '(空格)分割。
('', 'a', '1b2c2!!')
>>> a.rpartition('1')
('a', '1', 'b2c2!!')
>>> a.rpartition('FF')
('', '', 'a1b2c2!!')
>>>
rsplit(sep=None, maxsplit=-1)方法:通过指定分隔符对字符串进行分割并返回一个列表,默认分隔符为所有空字符,包括空格、换行(\n)、制表符(\t)等。类似于 split() 方法,只不过是从字符串最后面开始分割。
>>> a = 'a cc cc 12!'
>>> a.rsplit() # 默认以空格进行分割
['a', 'cc', 'cc', '12!']
>>> a.rsplit('c') #以指定的字符 'c'进行分割
['a ', '', ' ', '', ' 12!']
>>> a.rsplit('c',2) #以指定的字符 'c'进行分割,并且从后面开始分割 '2'次。
['a cc ', '', ' 12!']
>>>
rstrip([chars])方法:删除 string 字符串末尾的指定字符(默认为空格)
>>> a ='abc '
>>> a.rstrip() #默认删除字符串最后一位的 '空格'
'abc'
>>> a ='abcd' #删除最后一位指定的字符 'd'
>>> a.rstrip('d')
'abc'
>>>
split(sep=None, maxsplit=-1)方法:以 sep 为分隔符截取字符串,如果maxsplit 有指定值,则仅截取 maxsplit 个子字符串。
>>> a = 'ab*%%%@cd'
>>> a.split('%') #以指定的字符 '%'进行分割
['ab*', '', '', '@cd']
>>> a.split('%',2) #以指定的字符 '%'进行分割,只分割 '2'次
['ab*', '', '%@cd']
>>>
splitlines([keepends])方法:按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
>>> a
'ab!!\nAAA\rBBB\n23'
>>> a.splitlines() #默认以 '\n、\r\n、\n'进行分割
['ab!!', 'AAA', 'BBB', '23']
>>> a.splitlines(True) #添加了参数 'True',会保留分割字符
['ab!!\n', 'AAA\r', 'BBB\n', '23']
>>> a.splitlines(False) #添加了参数 'False'
['ab!!', 'AAA', 'BBB', '23']
>>>
startswith(prefix[, start[, end]])方法:检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
>>> a = 'abcdef'
>>> a.startswith('ab') #判断字符串 a 是否以字符 'ab'开头
True
>>> a.startswith('b') #判断字符串 a 是否以字符 'b'开头
False
>>> a.startswith('b',1) #判断字符串 a 是否以字符 'b'开头(从索引为 ' 1 '时开始判断)
True
>>> a.startswith('bc',1)
True
>>> a.startswith('bc',1,2) #判断字符串 a 是否以字符 'bc'开头(从索引为 ' 1 '时开始判断[左闭右开,所以取不到索引 ' 2 '的元素])
False
>>>
strip([chars])方法:用于移除字符串头尾指定的字符(默认为空格)。可以用一个变量接住移除后的值
>>> a=' abc '
>>> a.strip() #默认移除 空格
'abc'
>>> a='!abc!'
>>> a.strip('!') #字符串首和尾都有字符 "!",所以会同时移除 "!"
'abc'
>>> a='!abc@'
>>> a.strip('!') #移除字符串首部的字符 "!"
'abc@'
>>> a='!abc@'
>>> a.strip('@') #移除字符串尾部指定的字符 "@"
'!abc'
>>>
swapcase()方法:用于对字符串的大小写字母进行转换。
>>> a = 'AA!8!bb'
>>> a.swapcase() #字符串中大写的A变成小写的a,小写的b变成大写的B。其它字符不受影响。
'aa!8!BB'
>>>
title()方法:返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())。
>>> a = 'abcd'
>>> a.title() #首字母大写
'Abcd'
>>>
upper()方法:转换字符串中的小写字母为大写
>>> a = 'abcdef'
>>> a.upper() #小写换成大写
'ABCDEF'
>>>
zfill(width)方法:返回长度为 width 的字符串,原字符串右对齐,前面填充0
>>> a = 'abcdef'
>>> a.zfill(10)
'0000abcdef'
>>>
字符串切片与步长:
字符串切片操作(slice)可以从一个字符串中获取其中字符串的一部分。
>>> a = 'abcdefg'
>>> a[2:] #取前2个字符之后的元素
'cdefg'
>>> a[:2] #从最开始取到第2个元素
'ab'
>>> a[:] #从最开始取到最后一个元素
'abcdefg'
>>> a[2:5] #取第2个元素之后至第5个元素
'cde'
>>> a[::2] #在所有元素中2个2个的取(跳着取元素,比如找奇数就比较好用)
'aceg'
>>> a[::-1] #里面的参数'-1' ,是指倒着取字符串里面的元素
'gfedcba'
>>>