字符串
Python的字符串是一个有序的字符集合,有序指的是可以通过偏移来访问每个字符,每个字符有严格的从左到右的位置顺序,类似于数组。Python中没有单个字符的类型(C语言中的char),取而代之的是使用一个字符的字符串。字符串是不可变序列,不可以在原处修改,也就是无法执行类似str[0] = 'x'的操作,而执行合并(str1 + str2)、修改字符串(str.replace(..))及分片(s[1:3])等字符串操作都是生成新的对象。
1. 字符串的编写方式
单引号括起来
>>> 'spa"m' #不可写成'spa'm',这变成'spa' + m',第2个不完整。 'spa"m' >>> 'spa''m' #'spa' + 'm' 'spam'
双引号括起来(不是两个单引号)
>>> "spa'm" "spa'm"
三引号括起来(三个单引号或三个双引号)
>>> '''spam''' 'spam' >>> """spam""" 'spam'
只要不引起歧义,可以在字符串中直接嵌入单引号(')或双引号(")而不用通过转义字符(\',\")。
还可以利用三引号(三个单引号或三个双引号)来注释代码块
x = 1 ''' import os print os.getcwd() ''' y = 2
2. 转义字符
转义字符 | 说明 |
\ | 忽视(连续),如果语句太长一行写不下,用\可以接到下一行。 |
\\ | 反斜线(保留\) |
\' | 单引号(保留') |
\” | 双引号(保留”) |
\a | 响铃 |
\b | 倒退 |
\f | 换页 |
\n | 换行 |
\r | 回到行首 |
\t | 水平制表符 |
\v | 垂直制表符 |
\xhh | 十六进制值,如\x00,\x08,\xff,h对应十六进制数。 |
\0oo | 十六进制值,如\000,\077,o对应八进制数。 |
\0 | NULL(不是字符串结尾),等价于\x00,Python中不是用\0来判断字符串结尾, 每个字符串都存有字符串的长度,通过计数来判断是否到达结尾。 |
raw字符串:如果字母r(大写或小写)出现在字符串的第一个引号前面,它将会关闭转义机制
>>> myFile = open(r'c:\new\text.dat', 'w') >>> myFile = open('c:\new\text.dat', 'w') #出错,因为\n和\t是转义字符,解析错误。
unicode字符串:在第一个引号前增加字母u(大写或小写),unicode字符串每个字符使用2个字节编码,可以支持更丰富的字符集。
>>> u'spam' u'spam' >>> 'eggs' + u'spam' #混合数据类型,自动转换成unicode u'eggsspam' >>> str(u'spam') #转换成正常字符串 'spam' >>> unicode('spam') #转换成unicode字符串 u'spam'
允许混合row和unicode字符串,但是u必须在r前面(ur'.....')
>>> ur'c:\new\txt.dat' u'c:\\new\\txt.dat'
3. 字符串格式化
字符串格式化语法:包含格式化代码的要格式化的字符串 % 要格式化的对象(多个的话,放在括号内)
格式化代码 | 说明 |
%s | 字符串(或任何对象),不是字符串会自动转成字符串 |
%r |
字符串,但使用repr,而不是str,repr显示的是解释器可读的,str显示的是人可读的。也就是说repr是面向解释器的,str是面向人的。在大部分情况下两者显示的值是相同的,但在一些特定的对象是不同的,如字符串。Str('a') == 'a',repr('a') == "'a'" ('a'由双引号“括起来) |
%c | 字符 |
%d | 有符号整数(十进制) |
%i | 整数 |
%u | 无符号整数(十进制) |
%o | 八进制整数 |
%x | 十六进制整数 |
%X | 十六进制整数,但打印时大写 |
%e | 浮点数,科学计数法表示 |
%E | 浮点数,科学计数法表示,使用大E |
%f | 浮点数 |
%g | 浮点数(根据值大小采用%e或%f) |
%G | 浮点数(根据值大小采用%E或%f) |
%% | 百分号标记 |
>>> '%d %s %d you' % (1, 'spam', 4) '1 spam 4 you' >>> '%s %s %s' % (42, 3.14, [1, 2, 3]) '42 3.14 [1, 2, 3]'
更高级的格式化,左侧的格式化代码:%[(name)][flags][width][.precision]code
- []:方括号内的表示可选
- 当要格式化的对象为字典时可以使用(name),name替换成键,但键必须是字符串才行。
- flags:有三种标志,左对齐(-)、正负号(+)、补零(0)
- width:宽度,不够补零或空格,宽度包括小数点和正负号
- .precision:精度,小数的位数
- code:对应格式化代码,如d,s
>>> x = 123 >>> '%d.%5d.%-5d.%05d' % (x, x, x, x) '123. 123.123 .00123' >>> x = 1.23 >>> '%-5.2f.%05.2f.%+06.1f' % (x, x, x) '1.23 .01.23.+001.2' >>> '%(n)d %(3)s' % {'n': 1, '3': 'spam'} '1 spam'
4. 一些字符串相关方法介绍
单个字符转换
>>> ord('a') #将字符转换成对应的ASCII码 97 >>> chr(97) #将ASCII码转换成对应的字符 'a'
replace方法:s.replace(源字符串, 目的字符串, n),第三个参数为可选,表示将第n个出现源字符串替换成目的字符串,默认为所有。
>>> s = 'aba' >>> s.replace('a', 'c') #将所有的'a'替换成c 'cbc' >>> s.replace('a', 'c', 1) #将第一个'a'替换成c 'cba'
join方法:分隔字符串.join(字符串列表),将字符串列表串在一起,成为一个新的字符串,用分隔字符串隔开。
>>> '123'.join(['eggs', 'ham']) 'eggs123ham' >>> 'x'.join(['a', 'b', 'c']) 'axbxc'
split方法:s.split(分隔字符串),分隔字符串为可选参数,默认为空格,返回一个字符串列表。
>>> s = 'a b c' >>> s.split() ['a', 'b', 'c'] >>> s = 'a,b,c' >>> s.split(',') ['a', 'b', 'c'] >>> s = 'axxbxxc' >>> s.split('xx') ['a', 'b', 'c']