暑假Python基础整理 -- 字符串

字符串编码转换


美国标准信息交换码(ASCII码):最多只能表示256个符号,每个符号占一个字节

中文编码标准(GBK 和 GB2312):一个字节表示英文字母,两个字节表示中文字符

国际通用编码(UTF-8):采用一个字节表示英文字符,3个字节表示中文

Python 3.x 中,默认采用UTF-8编码有效的解决了中文乱码的问题

Python中有strbytes这两种常用的字符串类型,但是它们不能拼接在一起。其中,str表示Unicode字符(ASCII码或者其他),bytes表示二进制数据(包括编码的文本),通常情况下,str在内存中以Unicode字符表示,一个字符对应若干个字节。但是要在网络上传输str,或者要将str保存到磁盘上,就需要把str转换为bytes(字节类型)

bytes类型的数据是带有b前缀的字符串(用单引号或双引号表示),strbytes之间可以通过encode()decode()方法进行转换

使用encode()方法编码

str对象有一个encode()方法可以将字符串转换为二进制数据bytes ,这个转换过程称为编码。其语法格式如下:

str_name.encode(encoding="utf-8"[,errors='strict'])
  • str_name:表示要进行转换的字符串对象。
  • encoding="utf-8":可选参数,用于指定在编码时需要采用的编码,默认为UTF-8,若要使用中文,可以将该参数设置为GB2312
  • errors='strict':可选参数,用于指定错误的处理方式,默认为strict

errors的可选值有:

  • strict:遇到非法字符就抛出异常
  • ignore:忽略非法字符
  • replace:用“?“替换非法字符
  • xmlcharrefreplace:使用XML的字符引用

encode()方法不会修改原字符串

使用decode()方法解码

bytes对象有一个decode()方法可以将二进制型数据转换为字符串,将使用encode()方法转换的结果再转换为字符串,称为解码bytes_name为要转换的二进制对象,通常都是encode()转换的结果;encodingerrors的作用及使用与encode()方法相同。其语法格式如下:

types_name.decode(encoding="utf-8"[,errors='strict'])

字符串常用操作


拼接字符串

字符串通常可以使用+将两个字符串进行拼接,但是若要拼接非字符串类型的数据,则需要使用str()方法将该数据强制转换为字符串后再进行拼接,拼接后会产生一个新的字符串对象。如下示例:

english = "Hello, World!"
chinese = "你好,世界!"
print(english + "--" + chinese)
计算字符串的长度

在Python中,汉字在GBKGB2312编码中占两个字节,而在UTF-8Unicode中一般占3个(或4个)字节。其语法格式如下:

len(string)  # string 为被计算长度的字符串对象

倘若我定义一个字符串为string = 'Hello 世界!',统计string的长度,代码如下:

string = "Hello 世界!"
print(string)      # 输出结果为9

默认情况下,当使用len()函数计算字符串长度时,不区分英文、数字和汉字,所有字符都被认为是一个字符。

在开发中,如果需要获取采用utf-8或者gbk编码的字符串长度,则可以使用下面代码:

string = "Hello 世界!"

# 计算UTF-8编码的字符串长度
lenght_utf8 = len(string.encode()) 
print("UTF-8编码的字符串长度:" + str(lenght_uft8))  # 15

# 计算gbk编码的字符串长度
lenght_gbk = len(string.encode("gbk")) 
print("gbk编码的字符串长度:" + str(lenght_gbk))  # 12
截取字符串

字符串也是序列,因此也支持切片操作。其语法结构如下:

string[start, end, step]
  • start:指定要截取的第一个字符的索引(包含此位置),若省略,默认为0
  • end:指定要截取的最后一个字符的索引(不包含此位置),若省略,默认为序列的长度
  • step:指定切片的步长,若省略,默认步长为1,当省略该步长时,最后一个冒号可以同时省略
分割字符串

字符串对象的split()方法可以实现字符串的分割,把一个字符串按照指定的分割符切分为字符串列表。语法如下:

'''字符串名.split(分隔符, 分割次数n) 指分割前n个'''
string.split(sep,maxsplit)
  • sep用于指定分隔符,可以包含多个字符,默认为None,即所有空字符(空格、换行、制表符)。
  • maxsplit用于指定分割的次数,若指定为-1或未指定,则表示无限制,否则返回结果列表元素的个数最多为maxsplit + 1
合并字符串

合并字符串会将多个字符串采用固定的分隔符连接在一起,合并字符串可以使用字符串对象的join()方法实现,其语法格式如下:

new_str = string.join(iterable)
  • new_str:表示合并后生成的新字符串
  • string:字符串类型,用于指定合并时的分隔符
  • iterable:可迭代对象,该对象的所有元素都将被合并成一个新的字符串

如下示例代码:

list = ["小王","小刘","小张"]
new_str = "牵着".join(list)
print(new_str)  # 输出结果为:小王牵着小刘牵着小张
检索字符串

count()方法用于检索指定字符串在另一个字符串中出现的次数,若不存在则返回0,其语法格式如下:

string.count(sub[,start[,end]])
  • string:原字符串
  • sub:需要检索的字符串
  • start:可选参数,表示检索范围的起始位置索引,默认从头开始检索
  • end:可选参数,表示检索的结束位置索引,默认检索到结束

find()方法用于检索是否包含指定的子字符串,如果检索的子字符串不存在,则返回-1,否则返回首次出现该子字符串的位置索引rfind()方法与find()类似,只是表示从右边开始检索。其语法格式如下:

string.find(sub[,start[,end]])
string.rfind(sub[,start[,end]])

index()方法与find()方法类似,也用于检索是否包含指定的子字符串,只是当index(sub)所检索的sub不存在于被检索的字符串,则会抛出异常rindex()方法与index()类似,只是表示从右边开始检索。其语法格式如下:

string.index(sub[,start[,end]])
string.rindex(sub[,start[,end]])

startswith()方法用于检索字符串是否以指定的子字符串开头,返回bool类型。其语法格式如下:

string.startswith(sub[,start[,end]])

endswith()方法用于检索字符串是否以指定的子字符串结尾,返回bool类型。其语法格式如下:

string.endswith(sub[,start[,end]])
字母的大小写转换

lower()方法用于将字符串中的全部大写字母转换为小写字母。若发生转换则将生成新的字符串,否则返回原字符串。其语法格式如下:

new_str = string.lower()

upper()方法用于将字符串中的全部小写字母转换为大写字母。若发生转换则将生成新的字符串,否则返回原字符串。其语法格式如下:

new_str = string.upper()
去除空格和特殊字符

strip()方法用于去掉字符串左、右两侧的空格和特殊字符,其语法格式如下:

string.strip([char])
  • char:可选参数,用于指定要去除的字符,可以指定多个。默认将去除空格、制表符\t、Enter符\r、换行符\n等。

lstrip()方法用于去掉字符串左侧的空格和特殊字符,其语法格式如下:

string.lstrip([char])

rstrip()方法用于去掉字符串右侧的空格和特殊字符,其语法格式如下:

string.rstrip([char])
格式化字符串

格式化字符串好比制作一个模板,在模板中预留几个位置,然后更具需求填入内容,这些空位需要指定的符号(占位符)进行标记,而这些符号将不会被显示。格式化字符串的方式有两种,分别是:

  • 使用%操作符
  • 使用字符串对象的format()方法(重点)

字符串提供了format()方法对字符串进行格式化,其语法格式如下:

string.format(args)

str用于指定字符串的显示样式(模板);arg用于指定要转换的项,若有多项,则用逗号进行分割。在创建模板时,需要使用{}:指定占位符,基本语法格式如下:

{[index][:[[fill]align][#][width][.precision][type]]}
  • index:可选参数,用于指定要设置格式的对象在参数列表中的索引位置,索引值从0开始,如果省略,则根据值的先后顺序进行自动分配。
  • fill:可选参数,用于指定空白处填充的字符
  • align:可选参数,用于指定对齐的方式。该参数的值为>时,表示内容(包括符号)右对齐;值为<时,表示内容左对齐;值为=时,只对数字类型生效,表示数字内容右对齐,如果是负数,则将负号放在填充内容的左侧,如果是正数,不添加符号;值为^时,表示内容居中。该参数需要配合width一起使用
  • sign:可选参数,用于指定有无符号数(值为“+”表示正数加正号,负数加负号;值为“-”表示正数不变,负数加负号;值为空格表示正数加空格,负数加负号)。
  • #:可选参数,对于二进制、八进制和十六进制,如果加上“#”,表示会显示0b/0o/0x前缀,否则不显示。
  • width:可选参数,用于指定所占宽度
  • .precision:可选参数,用于指定保留的小数位数
  • type:可选参数,用于指定类型

取值如下表所示:

格式字符说明格式字符说明
S对字符串类型进行格式化b将十进制整数自动转换成二进制表示,并对其进行格式化
D十进制整数o将十进制整数自动转换成八进制表示,并对其进行格式化
C将十进制整数自动转换成对应的Unicode字符x或者X将十进制整数自动转换成十六进制表示,并对其进行格式化
e或者E转换为科学计数法表示再格式化f或者F转换为浮点数(默认小数点后保留6位),并对其进行格式化
g或者G自动在e和f,或者E和F之间进行切换%显示百分比(默认显示小数点后6位)

示例代码如下:

temp = '编号:{:0>5s}\t姓名:{:s}\t年龄:{:d}\t'  
dic = {'小王':18, '小张':20, '小兰':19}  
n=0  
for key,value in dic.items():  
    n += 1  
    print(temp.format(str(n), key, value))

上述代码的输出结果是:

编号:00001	姓名:小王	年龄:18	
编号:00002	姓名:小张	年龄:20	
编号:00003	姓名:小兰	年龄:19

文章地址 : 暑假Python基础整理 – 字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值