字符串是一个有序的字符的集合,用来存储和表现基于文本的信息,python的内置数据结构之一。字符串是多个字符组成的序列,因此支持序列的相关操作。
支持的操作有:
1. 通过索引来访问>>> s = 'this is a test string'
>>> len(s) #len()函数可以得到字符串的长度
21
得到字符串的长度以后,就可以根据索引来访问字符串的内容。>>>s[0] #正向索引
't'
>>>s[-1] #反向索引时,索引值从右往左计数,从-1开始计数。
'g'
2. 支持分片操作>>>s[0:4]
'this'
>>>s[:4] #没有左值,表示从第一个值开始
'this'
>>>s[0:]#没有右值,表示从开始位置到最后一个值
'this is a test string'
>>> s[::2]#有步进值2,表示每隔2个取一个值。
'ti sats tig'
3. 支持两个字符串相加>>>s = s + ' xyz'
>>>s
'this is a test string xyz'
字符串具有的相关属性:字符串变量定义里以后,字符串内的字符不可改变。
常用的字符串方法find在一个较长的字符串中查找子字符串并返回字串所在位置的最左端索引,没有则返回-1
join在队列中添加元素
lower返回字符串的小写字母版
replace返回某字符串的所有匹配项被替换之后得到的字符串
split将字符串分割成序列
strip返回去除两侧空格的字符串
translate替换单个字符,进行多个替换。
join' '.join(str)在字符串str的每个元素之间插入分隔符 ' ',' '也可以替换为其他字符
ord将一个字符转换成对应的ASCII值
rstrip去掉最右边空格的字符串
chr将整数字符串转换成对应的字符
除了上面那些自带方法外,Python标准库re模块支持更高级的基于模式的字符串处理,还有更高级的文本处理工具,如XML解析器。
字符串种类单引号、双引号和三引号代表的字符串相同
转义字符,常见的有\n,\t,\\,\',\"
raw字符串:r"c:\new\test.spam",此时会抑制转移字符,使得字符串仅代表字面上的意思。但是raw字符串不能以单个 \ 结尾。
Bytes字符串:b'sp\x01am'
Python2中的Unicode字符串:u'eggs\u0020spam',python3中默认字符串就是Unicode字符串。
字符串和数字的转换:
int() 方法将字符串转换为数字
str() 方法将数字转换为字符串
ord(s) 方法讲字符串转换为对应的ASCII码
chr(n) 方法讲ASCII数字转换味对应的字符。
字符串格式化(最重要的内容)
1. 格式化表达式,使用print或printf输出,基本格式如下:
"%[(name)][flags][width][.precision] typecode" % 要输出的内容
字段含义如下:
(name)表示根据名称自动解析后面的对象,讲name对应的值显示出来
示例:print('%(n)d, %(x)s' % {"n":1, "x":"spam"})
'1, spam'
flags转换标志,- 表示左对齐,+ 表示在转换值前面加上正负号,0表示转换值宽度不够时用0填充。
width输出字符串的宽度
.precision输出小数时,数字的位数,当precision为*号时,表示小数位数由后面的值给出。
示例:print('%f, %.2f, %.*f' % (1/3.0, 1/3.0, 4, 1/3.0)
'0.33333, 0.33, 0.3333'
typcode:printf style
字符串格式化的typecode类型转换类型含义
d,i带符号的十进制数
o不带符号的八进制数
u不带符号的十进制数
x不带符号的十六进制(小写)
X不带符号的十六进制(大写)
e科学计数法表示的浮点数(小写)
E科学计数法表示的浮点数(大写)
f,F十进制浮点数
g如果指数大于-4或者小于精度值则和e相同,其他情况与f相同
G如果指数大于-4或者小于精度值则和E相同,其他情况与F相
c单字符(接收整数或单字符字符串)
r字符串(使用repr转换任意Python对象)
s字符串(使用str转换任意Python对象)
aASCII字符
%显示%
(name)表示使用字典来格式化字符串,使用字典格式化的时机:
1. 需要格式化的内容反复出现
2. 需要格式化内容很多
name对应字典的key,相当于输出dict[name]
2. 格式化调用方法——format方法
: 号后面依次是填充字符,对齐方式,输出宽度。。标准格式是:"{[field_name]![conversion]:[[fill][align]][sign][#][0][width][,][.precision][typecode]}".format('test')
field_name 两种形式,以0,1,2这样的形式时,表示根据位置来查找变量,以keyword形式时,表示字典格式化,对应字典中的键值。
conversion 表示转换格式,支持三种类型,分别是s|r|a,即str、repr、ascii三种格式的字符串。
fill 填充字符,可以是除'{'、'}'外的任意字符
align 对齐方式'
'>' 右对齐
'=' 数字对齐
'^' 居中对齐
sign 仅针对数字类型'+' 表示正负数都要带上符号
'-' 表示负数要带上符号,默认选项
space 表示正数前面要带一个空格,负数前面带'-'号
, 用来分隔数字,例如1,234.5
width 对齐宽度
.precision输出小数时,输出数字的位数
typecode 输出的对象格式,有以下值,和%格式化中的typecode含义一致:
"b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
示例1:直接具体的数值>>> '{0!s:-^40}'.format('test')
'------------------test------------------'
>>> '{0!r:-^40}'.format('test')
'-----------------'test'-----------------'
示例2:0做填充字符>>> '{0!s:0^40}'.format('test')
'000000000000000000test000000000000000000'
>>> '{0!r:0^40}'.format('test')
'00000000000000000'test'00000000000000000'
示例3:变量>>> '{0:{fill}{align}{width}}'.format('test',fill='-',align='^',width='40')
'------------------test------------------'
示例4:数字位数(,号用于分隔数字)>>> '{0:<40,.5}'.format(1234.5678)
'1,234.6
'
示例5:type=b,显示二进制数时。>>> '{0:<10b}'.format(42)
'101010'
基本用法:
1. '{0},{1} '.format('value0','value1')
在里{}里的0,1是要输出的变量,对应format里的value0和value1,如果{}里没有编号,则输出时依次输出formt里的内容。调整顺序时对应的输出也会调整,例如 '{1},{0} '.format('value0','value1')的输出结果是value1,value0。
2. '{name},{age}'.format(name='han',age='25')
在{}里的变量名和format里的变量名对应,即使调换顺序也不影响
'{name},{age}'.format(age=25,name='han')
和上面的输出结果一样
注意事项:
在format格式化的过程中,尽量指定各个输出值的位置,这样有利于精准输出
位置参数必须在关键字参数前面。
bytes(二进制格式,python3.x特有,python2.x里不区分bytes和str)
bytes和str的区别在于bytes是byte的序列,而str是unicode的序列b=str.encode()
s=bytes.decode()
bytes注意事项:在encode()和decode()里可以指定编码转换的格式,例如decode('utf-8')或decode('gbk')。应用于获取网页内容时得到不同编码格式的网页内容统一转换成通用的Unicode格式,便于处理。不同网页的内容需要通过第三方库来猜测网页的编码格式。
网络编程socket数据传输的是bytes格式,发送之前需要用encode()函数将其转换为bytes格式,在接收后需要使用decode()函数将接收到的数据转换为UTF8格式。过程如下:
数据str encode bytes->网络传输 ->bytes decode 数据strpython2.7转换编码格式import sys
reload(sys)
sys.setdefaultcoding('utf-8')
Unicode指的是编码规范,类似于http协议,而GBK,UTF-8类似于apache、nginx,是字符集编码,是对Unicode的支持和实现。bytes一般用于网络数据传输,而str一般用于程序之间的数据处理。因此在网络编程中,数据传输之前,一般要讲str转换成bytes,服务端在接收到bytes以后,要用decode()函数再转换成str。
bytearray(和bytes类型类似,但是bytearray中内容可变,bytes类型中的数据不可变)
bytearray用于改变bytes的内容,具体过程如下:b1=b'1234'
b2=bytearray(b1)
b2[0]=int(b'6'.hex(),16)
bytes(b2)
输出b'6234'
此时就得到改变后的b1