Python入门篇之字符串
所有标准的序列操作对字符串都适用,但字符串是不可变的
字符串常量:
单引号:‘spa"m'
双引号:"spa'm"
三引号:'''...spam...''',"""...spam..."""
转义字符:"s\tp\na\om"
Raw字符串:r"C:\new\test.spm"
Unicode字符串:u'eggs\u0020spam
单双引号是一样的
单双引号可以互换,字符常量表达式可以用两个单引号或两个双引号来表示--两种形式同样有效返回相同类型的对象:
>>>'zxcvbn',"zxcvbn" ('zxcvbn','zxcvbn') >>>#不适用转义字符就可以实现在一个字符串中包含其余种类的引号 >>>'knight"s',"knight's" ('knight"s',"knight's")
可以自动在任意的表达式中合并相邻的字符串常量,尽管也可以使用+操作符实现:
>>>title="sdfsd"'dfg'"fgfd" >>>title 'sdfsddfgfgfd'
字符串的格式化使用字符%来实现:
在%的左侧放置一个字符串,右侧放置希望格式化的值,可以使用一个值,也可以使用多个值的元组或字典
>>>format="Hello.%s.%senoughforya?" >>>values=('world','Hot') >>>printformat%values Hello.world.Hotenoughforya?
如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以免出错
长字符串、原始字符串
1、长字符串
如果需要写一个非常长的字符串,需要跨多行,则可以使用三个引号代替普通引号
>>>print'''thisis a verylong string''' thisis a verylong string
如果一行之中最后一个字符是反斜线,那么换行符本身就“转义”了,也就是被忽略了
>>>print"hello.\ world!" hello.world! >>>#这个用法也适用表达式和语句 >>>1+2+\ 4+5 12 >>>print\ 'hello.world' hello.world
2、原始字符串
原始字符串以r开头,可以在原始字符串中放入任何字符,最后输出的字符串包含了转义所用的反斜线,但是不能在字符串结尾输入反斜线:
>>>print\ 'hello.world' hello.world >>>printr'Let\'sgo!' Let\'sgo! >>>printr'thisisillegal\' SyntaxError:EOLwhilescanningstringliteral
索引与分片
字符串的字符是通过索引来提取的,将获得在特定位置的一个字符的字符串。
Python偏移量是从0开始的,并比字符串的长度小1,还支持类似在字符串中使用负偏移这样的方法从序列中获取元素,负偏移认作是从结束处反向计数
当使用一对冒号分隔的偏移索引字符串这样的序列对象时,将获取从下边界直到但不包括上边界的所有元素
索引(s[i])获取特定偏移的元素:
第一个元素的偏移为0
负偏移索引意味着从最后或右边反向进行计数
s[0]获取第一个元素
s[-2]获取了倒数第二个元素
分片(s[i:j])提取对应的部分作为一个序列:
上边界并不包含在内
分片的边界默认为0和序列的长度,如果没有给出的话
s[1:3]获取从偏移为1的元素,直到但不包括偏移为3的元素
s[1:]获取了从偏移为1直到末尾之间的元素
s[:3]获取了从偏移为0直到但是不包括偏移为3之间的元素
s[:-1]获取了从偏移为0直到但是不包括最后一个元素之间的元素
s[:]获取了从偏移0到末尾之间的元素
>>>s='spam' >>>s[0],s[-2] ('s','a') >>>s[1:3],s[1:],s[:-1] ('pa','pam','spa') >>>s[0],s[-2] ('s','a')
扩展分片:第三个限制值
分片表达式增加了一个可选的第三个索引,用作步进X[I:J:K]表示:索引X对象中的元素,从偏移为I直到偏移为J-1,每隔K元素索引一次
>>>s='abcdefghijklmnop' >>>s[1:10:2] 'bdfhj' >>>s[::2] 'acegikmo' >>>s='hello' >>>s[::-1] 'olleh' >>>s[4:1:-1] 'oll'
字符串转换工具
>>>'42'+1 Traceback(mostrecentcalllast): File"<pyshell#40>",line1,in<module> '42'+1 TypeError:cannotconcatenate'str'and'int'objects >>>int('42'),str(42) (42,'42') >>>repr(42),'42' ('42','42') >>>s='42' >>>i=1 >>>s+i Traceback(mostrecentcalllast): File"<pyshell#45>",line1,in<module> s+i TypeError:cannotconcatenate'str'and'int'objects >>>int(s)+i 43 >>>s+str(i) '421' >>>#类似也可以把浮点数转换成字符串或把字符串转换成浮点数 >>>str(3.1415),float("1.3") ('3.1415',1.3) >>>text='1.23E-10' >>>float(text) 1.23e-10
字符串代码转换
单个字符也可以通过将其传给内置的ord函数转换为其对应的ASCII码,chr函数则执行相反的操作:
>>>ord('s') 115 >>>chr(115) 's'
字符串方法
字符串比列表的方法还要丰富很多,因为字符串从string模块中“继承”了很多方法,本篇文章只介绍一些特别有用的字符串方法
1、find
find方法可以在一个较长的字符串中查找一个子字符串,它返回子串所在位置的最左端索引,如果没有找到则返回-1
>>>'withamoo-moohere,andamoo-moothere'.find('moo') 7 >>>title="MontyPython'sFlyingCirus" >>>title.find('Monty') 0 >>>title.find('Python') 6 >>>title.find('Zirquss') -1
这个方法可以接受可选的起始点和结束点参数:
>>>subject='$$$Getrichnow!!!$$$' >>>subject.find('$$$') 0 >>>subject.find('$$$',1) 20 >>>subject.find('!!!') 16 >>>subject.find('!!!',0,16) -1
2、join
join方法是非常重要的字符串方法,它是split方法的逆方法,用来在队列中添加元素:
>>>seq=[1,2,3,4,5] >>>sep='+' >>>sep.join(seq)
Traceback(mostrecentcalllast): File"<pyshell#15>",line1,in<module> sep.join(seq) TypeError:sequenceitem0:expectedstring,intfound >>>seq=['1','2','3','4','5'] >>>sep.join(seq) '1+2+3+4+5' >>>dirs='','usr','bin','env'
>>>'/'.join(dirs) '/usr/bin/env' >>>print'C:'+'\\'.join(dirs) C:\usr\bin\env