字符串是python中一个极为重要的数据类型,他的功能十分强大,应用也十分广泛,它可以表示符号和词语、载入到文本文件中作为内容、Internet网址和python程序,它是python中极为重要的处理工具集。
字符串常量
字符串常量使用起来极其简单方便,唯一差强人意可能是他的编写方式多种多样:
单引号:'jeff"D';
双引号:"jeff'D";
三引号:'''jeffD''',"""jeffD""";
转义字符:"j\teff\nD";
Raw字符串:r"C:\new\test.py";
还有bytes类型与Unicode类型字符串:b'jeffD',u'jeffD';
对于python中字符串的引用,单双引号并没有强引用弱引用的概念,他们是可以互换的,代表同一种意思,之所以有这两种方式是因为可以简化一些需要转义的字符串,例如:'jef\'D'简化为'jef"D',代码更为简洁易懂。
转义序列代表特殊字节
反斜杠用来做转义字符在很多地方都在使用,同样这也应用在字符串常量中。\跟一到多个字符,在python解释器会被单个字符代替,这个字符通过转义序列定义一个二进制值。
print(len('jeff\tD\n'))
运行结果:
6
这里\t与\n都只作为一个字符。python中有一整套的转义字符序列。
\newline 忽视(连续)
\\ 反斜杠(即\)
\' 就是'
\" 就是"
\a 响铃
\b 倒退
\f 换页
\n 换行
\r 返回
\t 空格制表符
\v 垂直制表符
\N{id} Unicode数据库id
\uhhhh Unicode16位16进制值
\Uhhhhhhhh Unicode32位16进制值
\xhh 十六进制值
\ooo 八进制值
\0 Null(不会结束字符串)
\other 保留
如果\后面跟的不是一个可转义字符,就会以\的形式出现在最终的字符串里。
print('jef\D')
运行结果:
jef\D
有些时候我们希望\在字符串中不进行转义,这个时候就用到raw字符串抑制转义。
print("C:\new\test.py")
print(r"C:\new\test.py")
运行结果:
C:
ew est.py
C:\new\test.py
raw字符串在这里的作用就是关闭转义机制。我们还可以用另一种方法,就是使用两个\代替一个\。
print("C:\\new\\test.py")
运行结果:
C:\new\test.py
值得注意的是,即使是raw字符串也不可以使用\结尾,\会转义后续引用的字符。也就是说r"...\"不是一个有效的字符串。并且奇数个\也不是有效的字符串常量。
有三种方式可以解决奇数个字符串常量的方法:
print(r"C:\new\test\\"[:-1])
print("C:\\new\\test\\")
print(r"C:\new\test"+'\\')
运行结果:
C:\new\test\
C:\new\test\
C:\new\test\
三重引号的字符串
三引号字符串也称作块字符串,可以操作任意多行的字符串,在程序需要输入多行文本的时候,比如在源文件中编写HTML或XML代码,直接使用这样的块字符串代替外部文本是极为方便的。并且他还长长用来做注释使用,当我们需要多行做注释时,有些工具不能使用快捷方式进行多行#时,这种方法显得尤为简便。不仅是注释,某些时候我们需要取消一些代码时也可以使用这种方法隐去不需要的代码。
字符串基本操作
首先,必须明确的一点是,字符串是一个不可变数据类型,我们所做的一切操作都没有改变原始的字符串,只是开辟出新的空间存放改变后的字符串,并且将变量指向新的字符串,我们肉眼所看到的觉得是字符串变了,其实底层的字符串并没有变化。这在操作字符串时一定要切记。
a='asdfg'
b='adf'
c='sdf'
print(b in a)
print(c in a)
运行结果:
False
True
在字符串中操作符重载发生作用,+与*在字符串在的操作为字符串拼接和重复的意思。与in判断类似的是find方法,in返回布尔值,而find方法会返回索引值,找不到则会报错。
同时字符串也是可迭代对象,我们可以使用for循环遍历它。
字符串的索引与切片
和所有有序类型一样,字符串也支持索引很切片的操作。python的索引支持负偏移方法从序列中获取元素,并且负偏移和字符串长度相加就是这个元素的正偏移量。我们简单的人为是从结束处倒着计数即可。
字符串切片使用冒号分割偏移索引字符串中连续的内容返回新的值。
索引:
1.第一个元素的偏移量为0;
2.负偏移意味着从右往左计数;
3.S[0]获取第一个元素;
4.S[-2]与S[len(S)-2]是同一个元素。
切片:
1.S[i:j:k]i与j是偏移量,k是步进,i与j默认是0和len(S);
2.S[1:3]指从偏移为1的元素,到但不包括3的元素;
3.S[1:]表示偏移为1到末尾之间的元素;
4.[:3]表示从开始到不包括索引为3之间的元素;[:-1]整个字符串的元素,除了最后一个元素以外的所有;
5.[:]顶层拷贝,整个字符串。
当步进为负数的时候表示从右往左,实际效果就是反转此序列。
name= 'jeffD'
print(name[::-1])
运行结果:
Dffej
切片时常使用在读取文件内容时,字符串使用‘\n’换行符结尾,line[:-1],就可以提取本行内容。除此之外还可以使用strip方法。
字符串转换工具
之前在整形常量中也介绍了+在数字类型中做数学加法计算,而在字符串中做拼接符号使用。那么我想要让字符串和数字使用+,必然会导致一个错误,我们如果需要这样做就需要使用到字符串转换工具,让他们具有相同的类型然后操作。
print(1+'11')
运行结果:
print(1+'11')
TypeError: unsupported operand type(s) for +: 'int' and 'str'
print(str(1)+'11')
print(1+int('11'))
运行结果:
111 (str)
12 (int)
当然我们还可以使用eva l()函数来完成这项操作。
print(1+eva l('11'))
运行结果:
12
ord()函数可以将str转换成对应的ASCII码,chr()执行相反操作,将ASCII码转化为对应的字符。
下面是此函数的应用,将二进制转化为十进制。
i=0
b='1011'
while b!='':
i=i*2 +(ord(b[0])-ord('0'))
b=b[1:]
print(i)
运行结果:
11
字符串常用方法
首先方法特定于对象类型,所以字符串方法只适用于字符串类型。
replace()方法: