Python数据类型之字符串和字节
Python数据类型之字符串和字节
4.1 字符串
4.1.1 字符串定义与基本操作
字符串是⼀种不可变的序列。顾名思义,字符串就是⼀组字符组成的序列,每个字符就是序列中的⼀个元素。
字符串可以包含零个或多个字符,字符需要使⽤引号界定。引号可以是:
单引号
双引号
三引号
创建字符串:
str="Hello World"
其中,单引号与双引号是完全等价的,⽽三引号可以在字符串内部换⾏。如果单(双)引号也需要换⾏,可以使⽤续⾏符“\”,三引号中使⽤续⾏符,则不会产⽣换⾏。
多个字符串常量也可以“⽆缝”的组合在⼀起。例如:
str= “Hello”“World”
字符串的操作:
索引
切⽚
运算
遍历每个字符
python格式化输出format4.1.2 转义序列
转义是当由于技术等原因、⽆法直接在代码中写出所要的字符时采⽤的,以多个字符的有序组合来表⽰原本需要的字符的⼿段,⽽转义序列(escape sequence)指在转义时使⽤的有序字符组合。
Python转义序列表:
4.1.3 字符串相关⽅法
count(sub[, start[, end]])
find / index(sub[, start[, end]])
rfind/ rindex(sub[, start[, end]])
format(*args,**kwargs)
join(iterable)
replace(old, new[, count])
lstrip / rstrip / strip([chars])
split / rsplit(sep=None, maxsplit=-1)
splitlines([keepends])
startswith (prefix[, start[, end]])
endswith (suffix[, start[, end]])
upper / lower()
capitalize()
partition / rpartition(sep)
isalpha()
isnumeric()
isdigit()
isdecimal()
isidentifier()
islower / isupper()
isspace()
其中isnumeric,isdigit与isdecimal三者之间的区别如下:
三者之间是包含关系,isnumeric范围最⼤,isdigit其次,isdecimal最⼩。
4.2 字节
4.2.1 定义与基本操作
bytes是⼀系列字节组成的序列,是不可改变的。bytes每个元素的值在[0, 255]范围内(⽆符号单字节)。
4.2.2 相关⽅法
bytes的⽅法与str相似,可参考str的⽅法。
4.3. 字符集与编码
字符集,就是⼀组字符组成的集合。常见的字符集有ASCII,BIG5,Unicode,GBK等。
不同的字符集,包含的字符个数也可能是不相等的。在存储字符时,我们需要将字符转换成⼆进制值,称为编码,同样,在读取保存的⼆进制值时,我们需要将⼆进制值还原成字符,称为解码。可以
说,字符集,就是规定了字符与⼆进制之间如何进⾏转换的规则,即编码与解码的规则。
因此,我们如果对某⼀个⽂本⽂件采⽤了⼀种编码⽅式保存,在解析该⽂件内容时,就需要采⽤相同的编码⽅式解码,否则就很可能造成乱码的现象,原因就是编码与解码的⽅式不统⼀造成的。
4.3.1 Unicode与UTF-8
在Python中,字符串str类型使⽤的字符集是Unicode字符集,该字符集是国际组织制定的可以容纳世界上所有⽂字和符号的字符编码⽅案。例如,ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)字符集只能⽀持⼀些西⽅字符,不⽀持汉字,⽇⽂等语⾔字符。 ⽬前Unicode字符集包含1114112个编码值(0x0 ~ 0x10FFFF)。
然⽽,由于Unicode取值范围的⼴泛性,这可能会对存储带来⼀些问题。对于码值⼩的字符,只需要使⽤1个字节存储就够了,但是,对于码值⼤的字符,却需要使⽤更多的字节去存储。如果使⽤定长的⽅式存储,这势必会造成存储空间的浪费。因此,后来⼈们创建了UTF-8的编码⽅式。UTF-8(8-bit Unicode Transformation Format)是针对Unicode设定的可变长度字符编码,是对Unicode字符集的⼀种通⽤转换格式。UTF-8编码使⽤1 ~ 4个字节来表⽰Unicode(0x000000 ~ 0x10FFFF)区间的值。
如下表:
取值占⽤空间(字节)
0x000000 ~ 0x00007F1
0x000080 ~ 0x0007FF2
0x000800 ~ 0x00FFFF3
0x010000 ~ 0x1FFFFF4
Python3默认⽂件的编码⽅式为UTF-8编码(Python2默认为ASCII)。
4.3.2 str与bytes
我们可以在str(字符串)与bytes(字节)之间进⾏转换。通过调⽤str的encode⽅法可以返回字符串编码之后的结果(bytes类型)。同样,通过调⽤bytes类型的decode⽅法,可以将字节序列解码,转换回编码之前的字符串(str类型)。
此外也可以通过bytes与str函数,来实现编码与解码的操作。
4.4 格式化输出
有时候,多个字符串进⾏拼接会显得过于繁琐,这在数字与字符串拼接时更加明显,因为我们不得不使⽤str进⾏转换才⾏。⽽且,有时候我们可能需要对输出格式进⾏严格的控制,例如,⼩数点后保留⼏位,字符占⽤的宽度等。此时,我们就可以对字符串进⾏格式化,以输出我们期望的形式。
在Python中,我们可以采⽤两种⽅式进⾏字符串的格式化:
旧式格式化——使⽤“%”的形式。
新式格式化——使⽤str类的format⽅法
最新格式化——使⽤格式化字符串常量
4.4.1 旧式格式化——使⽤“%”的形式
在字符串对象后,可以使⽤%来进⾏格式化,格式如下:
格式化字符串%(值的元组或字典)
格式化字符串中的占位符格式为:
%[(关键字)][转换标记][最⼩宽度][.精度]转换格式
其中,%与转换类型是必选的,其他是可选的。说明如下:
%:指出这是占位符的开始。
关键字:⽤于匹配字典中的键,使⽤键所对应的值替换。
转换格式:
格式说明
d,i,u有符号⼗进制格式。
o有符号⼋进制格式。
x有符号⼗六进制格式。
X有符号⼗六进制格式。
f浮点格式,精度默认为6。
F浮点格式,精度默认为6。
e科学计数法格式,精度默认为6。
E科学计数法格式,精度默认为6。
g假设将数值转换成指数格式。
G假设将数值转换成指数格式。
c单字符格式,可以是单个字符或者整数值。
a将Python对象使⽤ascii函数转换成字符串格式。
s将Python对象使⽤str函数转换成字符串格式。
r将Python对象使⽤repr函数转换成字符串格式。
%转换成普通的%字符。
其中:
对于f和F,NaN与⽆穷⼤会显⽰为nan与inf.
对于g和G,如果数值指数值⼩于-4或者⼤于等于精度值(默认为6),则使⽤科学计数法格式,否则使⽤浮点格式(指数使⽤e和E)。
4.4.2 新式格式化——使⽤str类的format⽅法
从Python2.6(Python2版本)与Python3.0(Python3版本)起,str可以使⽤format⽅法来进⾏格式化,相⽐于以前的%形式,这种⽅式称为新式格式化。
形式为:
格式化字符串.format(替换值)
格式化字符串使⽤{}作为占位符,然后使⽤format⽅法的参数进⾏替换。占位符的格式如下:
{[字段名][:格式说明]}
以上部分都是可选的。
与%格式化相同,format⽅法的格式化也提供动态模板的⽅式,就是使⽤嵌套的{}来指定动态模板设置即可。动态模板设置建议使⽤关键字参数的形式,这样有利于程序的可读性。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论