字符串
字符串编码转换
Python3.x默认采用UTF-8编码,
一个字节表示英文字母
三个字节表示中文
使用encode()方法编码
str.encode([encoding=“utf-8”][,errors=“strict”])
encoding=“utf-8”:用于指定在转码时采用的编码,默认是utf-8,如果想使用简体中文,设置为gb2312
errors=“strict”:用于指定错误处理方式,可选
strict(遇到非法字符时抛出异常)
ignore(忽略非法字符)
replace(用“?"替换非法字符)
xmlcharrefreplace(使用XML的字符引用)
>>> str1 = "你我他"
>>> byte1 = str1.encode()
>>> byte1
b'\xe4\xbd\xa0\xe6\x88\x91\xe4\xbb\x96'
使用decode()方法解码
byte.decode([encoding=“utf-8”][,errors=“strict”])
>>> byte1
b'\xe4\xbd\xa0\xe6\x88\x91\xe4\xbb\x96'
>> str2 = byte1.decode()
>>> str2
'你我他'
字符串常用操作
拼接字符串
使用 “+” 连接多个字符串,并产生一个字符串对象
>>> str1 = "abcdefg"
>>> num = 11000
>>> str2 = str1 + str(num)
>>> str2
'abcdefg11000'
计算字符串长度
len(string)
>>> str1 = "abcdefg你我他"
>>> len(str1)
10 #len不区分英语,数字,汉字,都认为是1
>>> len(str1.encode())
16 #默认utf-8,转码之后字母一个字节,汉字三个字节
>>> len(str1.encode('gbk'))
13 #gbk转码之后字母一个字节,汉字两个字节
截取字符串
string[start :end : step]
>>> str1 = "abcdefg你我他"
>>> str1[1]
'b'
>>> str1[-1]
'他'
>>> str1[5:]
'fg你我他'
>>> str1[7:9]
'你我'
>>> str1[:9:2]
'aceg我'
分割/合并字符串
分割
str.split(sep, maxsplit)
sep:用于指定分隔符,默认为None
maxsplit:用于指定分割的次数
>>> str1 = "a b c d e,f,g>>>h>>>ijk"
>>> list1 = str1.split() #默认用空白符分割
>>> list1
['a', 'b', 'c', 'd', 'e,f,g>>>h>>>ijk']
>>> list1 = str1.split('>>>')
>>> list1
['a b c d e,f,g', 'h', 'ijk']
>>> list1 = str1.split(',')
>>> list1
['a b c d e', 'f', 'g>>>h>>>ijk']
>>> list1 = str1.split(' ',3) #用空白符只分割3次
>>> list1
['a', 'b', 'c', 'd e,f,g>>>h>>>ijk']
>>> list1 = str1.split('>') #分割之后没有内容的位置将产生一个空元素
>>> list1
['a b c d e,f,g', '', '', 'h', '', '', 'ijk']
合并
strnew = string.join(iterable)
>>> str1 = "abcd"
>>> list1 = ['2','3','4']
>>> str2 = str1.join(list1)
>>> str2
'2abcd3abcd4' #以'abcd'为分隔符进行合并
>>> str3 = ''.join(list1)
>>> str3
'234' #以'无'作为分隔符进行合并
检索字符串
count()
count()用于检索指定字符串在另一个字符串中出现的次数,不存在则返回0
str.count(sub[,start[,end]])
sub:要检索的字符串
start:检索范围起始位置
end:检索范围结束位置
>>> str1 = "abcdefg"
>>> str1.count('e')
1
>>> str1.count('e',0 ,3)
0
find()
str.find(sub[,start[,end]])
find()用于检索是否包含此子字符串,如果不存在返回-1,如果存在则返回首次出现该子字符串的索引值
>>> str1 = "abcdefg"
>>> str1.find("de")
3
>>> str1.find("ed")
-1
rfind()
str.rfind(sub[,start[,end]])
与find()类似,从右边开始查找,索引值不变
>>> str1 = "abcdefg"
>>> str1.find('e')
4
>>> str1.rfind('e')
4
index()
str.index(sub[,start[,end]])
与find()类似,不同点是如果指定字符串不存在时会抛出异常
rindex()
str.rindex(sub[,start[,end]])
与rfind()类似,从右边开始查找
startswith()
str.startswith(prefix[,start[,end]])
startswith()用于检索字符串是否以指定子字符串开头,如果是返回True,否则返回False
>>> str1 = "abcdefg"
>>> str1.startswith("ab",0,5)
True
>>> str1.startswith("ab",0,1)
False
endswith()
str.endswith(suffix[,start[,end]])
endswith()用于检索字符串死否以指定子字符换结尾,如果是返回True,否则返回False
>>> str1 = "abcdefg"
>>> str1.endswith("fg",0,5)
False
>>>str1.endswith("fg",2,7)
True
字母的大小写转换
lower()
str.lower()
大写转换成小写
>>> str1 = "ABCDefg"
>>> str1.lower()
'abcdefg'
upper()
str.upper()
小写转成大写
>>> str1 = "ABCDefg"
>>> str1.upper()
'ABCDEFG'
去除字符串中的空格和特殊字符
strip()
str.strip([chars])
去除字符串左右两侧的空格和特殊字符
>>> str1 = " abcdefghi"
>>> str1.strip()
'abcdefghi' #去除了开头空格
>>> str1 = " @@,,...abcdefghi"
>>> str1.strip("@,") #开头有空格,所以无法去除@
' @@,,...abcdefghi'
>>> str1.strip(" @") #去除开头的空格和@
',,...abcdefghi'
>>> str1.strip(" @,.") #依次去除开头的所有特殊字符
'abcdefghi'
>>> str1 = " @@,,...abcdefghi@@"
>>> str1.strip("@,.") #去除了结尾的@
' @@,,...abcdefghi'
>>> str1.strip(" @,.") #去除了开头和结尾的所有特殊字符
'abcdefghi'
lstrip()
去除字符串左侧的空格和特殊字符
rstrip()
去除字符串右侧的空格和特殊字符
格式化字符串
意思是先制定一个模板,在模板中预留空位,在根据需要填上相应的内容,这些空位需要通过指定的符号标记
使用 % 操作符
早期使用的方法,不推荐
‘%[-][+][0][m][.n]格式字符’%exp
[-]:用于指定左对齐,正数前面无符号,负数前面加负号
[+]:用于指定右对齐,正数前面加正号,负数前面加负号
[0]:表示右对齐,与[m]一起使用
[m]:占有宽度
[.n]:小数点后保留的位数
格式字符:用于指定类型
exp:要转换的项
>>> template = '编号:%09d 公司名称:%s 官网:http://www.%s.com'
>>> template%context1
'编号:000000007 公司名称:百度 官网:http://www.baidu.com'
>>> template%context2
'编号:000000008 公司名称:谷歌 官网:http://www.google.com'
format()
str.format(args)
创建模板:
{[index][:[[fill]align][sign][#][width][.precision][type]]}
index:用于指定要设置格式的对象在参数列表中的索引位置,索引值从0开始,如果省略,则根据值的先后顺序自动分配
fill:用于指定空白处填充的字符
align:用于指定对齐方式(<左对齐,>右对齐,=数字内容右对齐,^内容居中),需要配合width使用
sign:用于指定有无符号
#:会显示0b/0o/0x前缀
width:所占宽度
.precision:用于指定保留小数位数
type:用于指定类型
>>> template = '编号:{:0>9s} 公司名称:{:s} 官网:http://www.{:s}.com'
>>> template.format('7','百度','baidu')
'编号:000000007 公司名称:百度 官网:http://www.baidu.com'
>>> template.format('8','谷歌','google')
'编号:000000008 公司名称:谷歌 官网:http://www.google.com'
>>> print('{0:.1f}用科学计数法表示:{0:E}'.format(120000.1))
120000.1用科学计数法表示:1.200001E+05