python3中,有三种字符串类型:str用于Unicode文本(ASCII或其他),bytes用于二进制数据(包括编码的文本),bytearry是bytes的一种可变的变体。
在python2.6中,unicode字符串表示宽Unicode文本,str字符串处理8位文本和二进制数据。
#自动合并相邻的字符串表达式
>>> 'a ' 'of' ' b'
'a of b'
1.转义序列代表特殊字节
反斜杠用来引入特殊的字节编码,是转义序列。转义序列让我们能够在字符串中嵌入不易通过键盘输入的字节。字符串常量中 \,以及它后面的一个或多个字符,在最终的字符串对象中会被一个单个字符所替代,这个字符通过转义序列定义了一个二进制值。例如’‘\n",表示一个单字符。在字符集中包含了换行字符这个值(通常来说,ASCII编码为10)的字节。
符号 | 意义 |
---|---|
\b | 倒退 |
\f | 换页 |
\n | 换行 |
\r | 返回 |
\t | 水平制表符 |
\v | 垂直制表符 |
\N{id} | Unicode数据库ID |
\uhhhh | Unicode 16位的十六进制值 |
\Uhhhhhhhh | Unicode 32位的十六进制值 |
\xhh | 十六进制值 |
\ooo | 八进制值 |
\0 | null(空) |
\other | 不转义(无特殊意义) |
#含有转义字符的字符串打印时的格式取决于打印的方式。交互模式下是以转义字符的形式回显,print会将其解释出来
>>> s = 'a\nb'
>>> s
'a\nb'
>>> print(s)
a
b
#len函数可以返回字符串有多少个字节。十六进制显示非打印的字符。
>>>len('\x41')
1
>>>print('\x41')
A
>>> s = '\x0a1' #x0a转换成十进制的10,ASCII编码10,表示换行。
>>> print(s)
1
>>> len(s)
2
>>> len('\001')
1
#raw关闭转义机制,但也不能以单个‘\’结尾
f = open(r"c:\new\text.data",'w')
2.字符串格式化
代码 | 意义 |
---|---|
d | 十进制整数 |
i | 十进制整数 |
o | 八进制整数 |
u | 与d相同 |
x | 十六进制(小写) |
X | 十六进制(大写) |
e | 浮点指数(小写) |
E | 浮点指数(大写) |
f | 浮点十进制 |
F | 浮点十进制 |
g | 浮点数格式化,如果指数小于-4时使用小写的指数形式,否则使用十进制形式。 |
G | 浮点数格式化,如果指数小于-4时使用大写的指数形式,否则使用十进制形式。 |
c | 格式化字符串(接受数字或单字符)(结果为ASICII编码对应的字符) |
r | 任何对象,使用repr()(回显方式打印) |
s | 任何对象,使用str() |
a | 格式化ASCII码(格式化后为ASCII编码) |
% | %常量 |
对于浮点数,可以指定(-)左对齐,(+)正负号,数字位数(小数点和正负号各占一位)、小数点后的位数和补零;*指定精度
>>> f = '%+05.2f' % s
>>> f
'+1.23'
>>> a=1.23456
>>> c= '%.*f' % (2,a)
>>> c
'1.23'
3.基于字典的字符串格式化
字符串的格式化允许左边的占位符来引用右边字典中的键来提取对应的值。
>>> d = {'name':'Bob','age':10,'gender':'man'}
>>> '%(name)s %(age)d' % d
'Bob 10'
#格式化字符串里(name)和(age)引用了右边字典的键。
4.字符串格式化调用方法(format方法)
使用主体字符串作为模板,并且接受任意多个表示将要根据模板替换的值的参数。在主体字符串中,花括号通过位置或关键字指出替换目标。
>>> template = '{0} is a boy,{1} years old'
>>> template.format('Bob',12)
'Bob is a boy,12 years old'
>>> template = '{name} is a boy,{age} years old'
>>> template.format(age = 12,name='Bob')
'Bob is a boy,12 years old'
5.添加键、属性和偏移量
格式化字符串可以指定对象属性、序列偏移量和字典的键
>>> import sys
>>> lst = ['p','y','t','h','o','n']
>>> d = {'device':'laptop'}
>>> template = 'my {0[device]} run on {1.platform}. {2[2]}'
>>> template.format(d,sys,lst)
'my laptop runs on win32. t'
6.添加具体格式化
在格式化字符串中添加额外的的语法来实现更具体的层级,在替换目标的标识之后使用一个冒号,后面跟着可以指定字段大小、对齐方式和一个特定类型编码的格式化声明。
形式结构:{fieldname!conversionflag:formatspec}
fieldname是用于指定参数的一个数字或关键字,后面跟着可选的属性或索引。
conversionflag可以是r、或a,分别是该值对repr、str或ascii内置函数的一次调用。
formatspec指定了如何表示该值,包括字段宽度、对齐方式、补零、小数点精度等细节,并且以一个可选的数据类型编码结束。其组成形式:[fill]align][sign][#][0][width][.precision][typecode]
align可以是<、>、=或^,分别代表左对齐、右对齐、一个标记符后的补充和居中对齐。[0]对width补零,默认空格
width是该字段的长度,.precision是整体精度(不是小数点后)
>>> s= '\n'
>>> s = '12.345'
>>> f = '{0!r:>6}QAQ{1:<06.4}'.format(s,s1)
>>> f
" '\\n'QAQ12.300"
7.内置函数ord()和chr()
#ord()将单字符转换成ASCII码,
>>> ord('a')
97
#chr()将整数转换成字符串
>>> chr(65)
'A'