2021-10-09 python从入门到精通--第七章 字符串

字符串

字符串编码转换

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值