在Python里字符串是一个有序的字符的集合,用来存储和表现基于文本的信息。字符串可以用来表示能够像文本那样编辑的任何信息:符号和词语、在入道内存中的文本的内容、Internet网址和Python程序等。
在Python里字符串被划分为不可变序列这一类别,这意味着这些字符串所包含的字符存在从左至右的位置顺序,并且他们不可以在远处修改。字符串在Python里属于一个序列类型的对象类别,在后面介绍的列表,元组都是序列类型。在这章对文本的操作,很多都能应用于序列类型的对象类别。
在Python里有很多种方法来表示字符串: • 单引号:’Text”1”‘ • 双引号:”Text’1’” • 三引号:’’’…Lines…’’’,”””…Lines…”””. • 转义字符:”Line1\tadded tab\nLine2”
• Raw字符串:r”C:\My\new\Directory\file.exe” • Python 3.x中的Byte字符串:b’Te\x01xt’ • Python 2.x中的Unicode字符串:u’my\u0020text’
在Python 3.x里默认是使用Unicode方式存储字符串,在Python 2.x里默认是使用Latin-1方式存储字符串,因此不能直接识别中文。
# -*- encoding=utf8 -*-
在Python2.x脚本文件加上上面一句话就能正常使用中文。
跟其他开发语言相通,Python也有转义字符:(反斜杠)
当我们在一个字符串里需要同时使用单引号(‘)和双引号(“)的时候,根据我们所使用的表示字符串的引号类型进行转义。
>>>'a"b\'c'
在这里,我们要输入的字符串为a”b’c。
因为我们使用单引号来表示字符串的开始和结尾,所以b后面的单引号需要转义。当我们使用双引号来表示字符串,我们需要在双引号前面使用反斜杠进行转义:
>>>s = "a\"b'c"
除了这两个,我们还有很多反斜杠加上单个字符来进行转义的。
\newline:忽视新行(连续)#newline就是按键盘上的enter(或return)
\ :反斜杠,因为反斜杠本身就是转义字符,所以两个反斜杠才能表示一个。
\’ :单引号
\”:双引号
\a:响铃
\b:倒退(一位)
\f:换页(下一页,同一列。特定终端下可用。)
\n:新行(换行)
\r :返回(返回到开始)
\t :水平制表符
\v :垂直制表符
\uhhhh:Unicode 16位的十六进制值
\Uhhhhhhhh:Unicode 32位的十六进制值
\xhh:十六进制值
\ooo:八进制值
\0:Null(不是字符串结尾)
\other:不转义
转义测试:
>>> print('a\0b\0c')
a b c
>>> print('t\te\ex\t\ta\an\nd\dEND')
t e\ex an
d\dEND
>>> print('\u0043')
C
>>> print('\U00000043')
C
在Python里我们有的时候是需要印制转义的。比如,当有个Windows的目录如下:
>>> print('C:\newfile\files')
C:
ewfileiles
这个时候,要是按正常来说,\n和\f都会被转移,但我们写双斜杠又麻烦,这个时候可以使用raw字符串来印制转义。
>>> print(r'C:\newfile\files')
C:\newfile\files
这个时候其值会跟写的完全一样,当然,我们也可以写成如下:
>>> print('C:\\newfile\\files')
C:\newfile\files
但是还是没有使用印制转义方便,特别是在路径很长的时候。
在Python里有很多函数,可以对字符串进行操作:len()是看字符串长度的。
>>> print(len('小小哆啦'))
4
当我们使用unicode的时候,按中文字符的个数显示,但使用python2.x里的默认 字符编码,就会是三倍的数值。
因为Python3开始,默认字符编码是unicode,所以在Python3.x里是没有问题的。
字符串合并,重复等,跟数字的操作类似:
>>> 'Dora'+'Emon'
'DoraEmon'
>>> 'Dora'*7
'DoraDoraDoraDoraDoraDoraDora'
这里的第二个操作可以为我们节省很多字符输入,比如我们需要输入如下:
>>> print('-----……-----') #80个“-”
-----……-----
这个可以使用如下方法简单实现:
>>> print('-'*80)
-----……-----
当需要字符合并的时候,如下方法也可以,但不建议使用。
>>> 'Dora''Emon'
'DoraEmon'
>>> 'Dora' 'Emon'
'DoraEmon'
当我们需要对每个字符串进行操作的时候,可以如下进行操作:
>>> for DaXiong in 'DoraEmon':
... print(DaXiong,end=' ')
...
D o r a E m o n
这个意思是,我们从a字符串(序列)里按顺序提取字符,进行操作。关于循环,后面在函数章节讲解。
我们需要知道某个字符是否在一个字符串的时候,可以使用in或者not in来判断:
>>> 'D' in 'DoraEmon'
True
>>> 'D'not in 'DoraEmon'
False
>>> 'X' in 'DoraEmon'
False
我们也可以对字符串分片,比如对DoraEmon,我们只需要第一个字符,第三个字符,或者中间两个字符,后两个字符等等。
>>> Dora='DoraEmon'
>>> Dora[1],Dora[5],Dora[-3]
('o', 'm', 'm')
>>> Dora[1:5]
'oraE'
>>> Dora[-5:-1]
'aEmo'
>>> Dora[3:]
'aEmon'
>>> Dora[:-5]
'Dor'
>>> Dora[:]
'DoraEmon'
看一下在Python里对字符串的分段是如何进行的,例如:text=“ThisIsTestText”
提取单个字母时,需使用字母前的数字。比如:h,就是1或者-13,提取范围时是开始字母的前面的数字到最后字母的后面数字。比如h到x,就是[1,13]或者[-13,13]或者[1,-1]或者[-13,-1],从开始到某个字母就可以[:3];从某个字幕到结尾就是[3:]。
分片操作还可以有第三个参数,间隔。我们要第一个字母开始,每隔一个字母显示,结果应该是“DrEo”
>>> Dora='DoraEmon'
>>> Dora[::2]
'DrEo'
或者从第二个字母开始:
>>> Dora[1::2]
'oamn'
或者我们要倒过来:
>>> Dora[::-1]
'nomEaroD'
>>> Dora[-1:1:-1]
'nomEar'
当我们需要对字符串大小写等操作的时候,需要对字符串转换成相应的代码。这个时候我们就需要两个函数:ord和chr,ord是把一个字符转换成数字,chr是把数字转换成单个字符。
>>> ord('D')
68
>>> chr(68)
'D'
>>> ord('小')
23567
>>> chr(23567)
'小'
注:在Python3.x里可以直接使用中文字符,但是在Python2.x就不能直接用了。
用这两个函数,可以对字符串转换进行简单的大小写操作了,比如:把一个字符串里的内容全转换成大些:
>>> DORA='' #初始化DORA
>>> Dora='DoraEmon' #设置Dora
>>> for DaXiong in Dora: #循环,按顺序提取Dora字符串内容
... DaXiong_code=ord(DaXiong) #字符转换成ascII码
... if 97<=DaXiong_code and DaXiong_code <=122: #当值大于等于97(a的值)或小于等于122(z的值)
... DORA+=chr(DaXiong_code-32) #在值的基础上减32(大小写之间的差距)
... else:... DORA+=DaXiong #其余情况不变
...
>>> DORA
'DORAEMON'
在Python里字符串算是序列,但是字符串是不可修改的对象,所以如下操作不能正常被执行:
>>> Dora='DoraEmon'
>>> Dora[3]='DaXiong'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
但是我们可以重新给原来的变量赋值:
>>> Dora='DaXiong'+Dora[3:]
>>> Dora
'DaXiongEmon'