一.字符串编码转换
在Python中,有两种常用的字符串类型,分别是str和bytes。其中,str表示Unicode字符(ASCII或者其他),bytes表示二进制数据(包括编码的文本)。str和byte之间可以通过encode()方法和decode()方法进行转换,这两个方法互为逆过程。
①encode()方法
将字符串转化为二进制数据(即bytes)
(1)语法形式
str.encode([encoding = "utf-8"][,errors = "strict"])
encoding = "utf-8":可选参数,用于指定在转码时需要采用的编码,默认为utf-8。若只有这一个参数,可以省略"encoding="。
errors = "strict":可选参数,用于指定错误处理方式,其可选择的值有strict(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用"?"替换非法字符)。默认值为strict。
(2)示例
# -- coding: utf-8 --
verse = '床前明月光'
byte_1 = verse.encode('GBK')
byte_2 = verse.encode('UTF-8')
print("原字符:", verse)
print("转换成GBK编码:", byte_1)
print("转换成UTF-8编码:", byte_2)
②decode()方法
将二进制数据转换成字符串。
(1)语法形式
bytes.decode([encoding = "utf-8"][,errors = "strict"])
(2)示例
# -- coding: utf-8 --
verse = '床前明月光'
byte_1 = verse.encode('GBK')
byte_2 = verse.encode('UTF-8')
print("原字符:", verse)
print("转换成GBK编码:", byte_1)
print("转换成UTF-8编码:", byte_2)
print("解码后:", byte_2.decode('UTF-8'))
二.字符串常用操作
①拼接字符串
使用”+运算符可以连接多个字符串,且字符串不允许直接与其他数据类型进行拼接。
# -- coding: utf-8 --
verse1 = '床前明月光'
verse2 = '疑是地上霜'
print(verse1 + "," + verse2)
②计算字符串的长度
Python中提供len()函数来计算字符串的长度。不区分英文、数字和汉字。
# -- coding: utf-8 --
verse1 = '床前明月光'
length = len(verse1)
print(length)
③截取字符串
截取字符串,采用切片的方法。
(1)语法形式
string[start:end:step]
(2)示例
# -- coding: utf-8 --
str1 = '床前明月光,疑是地上霜'
substr1 = str1[1]
substr2 = str1[5:]
substr3 = str1[:5]
substr4 = str1[2:5]
print("原字符:", str1)
print(substr1 + '\n' + substr2 + '\n' + substr3 + '\n' + substr4)
④分割、合并字符串
(1)分割字符串
字符串对象的split()方法可以实现字符串的分割
语法形式:
str.split(sep,maxsplit)
str:表示要进行分割的字符串
sep:用于指定分隔符,可以包含多个字符,默认为None,即所有空字符。
maxsplit:可选参数,用于指定分割的次数,如果不指定或者为-1,则分割次数没有限制,否则返回结果列表的元素个数最多为maxsplit+1。
示例:
str1 = '床 前 明 月 光>>>疑 是 地 上 霜'
print("原字符串:", str1)
list1 = str1.split()
list2 = str1.split('>>>')
list3 = str1.split('.')
list4 = str1.split(' ', 4)
print(str(list1) + '\n' + str(list2) + '\n' + str(list3) + '\n' + str(list4))
list5 = str1.split('>')
print(list5)
(2)合并字符串
合并字符串可以使用字符串对象的join()方法来实现
语法形式:
strnew = String.join(iterable)
strnew:表示合成后生成的新字符串。
string:字符串类型,用于指定合并时的间隔符。
iterable:可迭代对象,该迭代对象中的所有元素(字符串表示)将被合并成一个新的字符串。
示例:
list_friend = ['咸鱼味的马楼', '山小嗨', '我只想摆烂']
str_friend = '@'.join(list_friend)
at = '@' + str_friend
print("您要@的人是:", at)
⑤检索字符串
(1)count()方法
语法形式:
str.count(sub[,stard[,end]])
str:表示原字符串。
sub:表示要检索的子字符串
start:可选参数,表示检索范围的起始位置的索引,如果不指定,则从头开始检索。
end:可选参数,表示检索范围的结束位置的索引,如果不指定,则一直检索到结尾。
示例:
str1 = '@山小嗨 @咸鱼味的马楼 @我只想摆烂'
print('字符串 “', str1,'”中包括', str1.count('@'), '个@符号')
(2)find()方法
find()方法用于检索是否包含指定的子字符串
语法形式:
str.find(sub[,stard[,end]])
str:表示原字符串。
sub:表示要检索的子字符串
start:可选参数,表示检索范围的起始位置的索引,如果不指定,则从头开始检索。
end:可选参数,表示检索范围的结束位置的索引,如果不指定,则一直检索到结尾。
示例:
str1 = '@山小嗨 @咸鱼味的马楼 @我只想摆烂'
print('字符串 “', str1,'”中@符号首次出现的位置索引为:', str1.find('@'))
(3)index()方法
index()方法用于检索是否包含指定的子字符串,如果不存在,则抛出异常
语法形式:
str.index(sub[,stard[,end]])
str:表示原字符串。
sub:表示要检索的子字符串
start:可选参数,表示检索范围的起始位置的索引,如果不指定,则从头开始检索。
end:可选参数,表示检索范围的结束位置的索引,如果不指定,则一直检索到结尾。
示例:
str1 = '@山小嗨 @咸鱼味的马楼 @我只想摆烂'
print('字符串 “', str1,'”中@符号首次出现的位置索引为:', str1.index('@'))
str1 = '@山小嗨 @咸鱼味的马楼 @我只想摆烂'
print('字符串 “', str1,'”中@符号首次出现的位置索引为:', str1.index('*'))
(4)startswith()方法
startswith()方法用于检索字符串是否以指定的子字符串开头的。如果是,则返回True;否则返回False。
语法形式:
str.startswith(prefix[,start[,end]])
str:表示原字符串。
prefix:表示要检索的字符串
start:可选参数,表示检索范围的起始位置的索引,如果不指定,则从头开始检索。
end:可选参数,表示检索范围的结束位置的索引,如果不指定,则一直检索到结尾。
示例:
str1 = 'http://www.baidu.com'
print('判断字符串 “', str1, '”是否以http为开头的, 结果为: ', str1.startswith('http'))
(5)endswith()方法
endswith()方法用于检索字符串是否以指定的子字符串结尾的。如果是,则返回True;否则返回False。
语法形式:
str.endswith(prefix[,start[,end]])
str:表示原字符串。
prefix:表示要检索的字符串
start:可选参数,表示检索范围的起始位置的索引,如果不指定,则从头开始检索。
end:可选参数,表示检索范围的结束位置的索引,如果不指定,则一直检索到结尾。
示例:
str1 = 'http://www.baidu.com'
print('判断字符串 “', str1, '”是否以.com结尾的, 结果为: ', str1.endswith('.com'))
⑥字母的大小写转换
(1)lower()方法
lower()方法用于将字符串中的全部大写字母转换成小写字母。
语法形式:
str.lower()
示例:
str1 = 'WWW.Baidu.com'
print("原字符串:", str1)
print("新字符串:", str1.lower())
(2)upper()方法
upper()方法用于将字符串的全部小写字母转换成大写字母。
语法形式:
str.upper()
示例:
str1 = 'WWW.Baidu.com'
print("原字符串:", str1)
print("新字符串:", str1.upper())
⑦去除字符串的空格和特殊字符
(1)strip()方法
strip()方法用于去掉字符串左、右两侧的空格和特殊字符。
语法形式:
str.strip([chars])
示例:
str1 = ' http://www.baidu.com \t\n\r'
print("原字符串str1:", str1)
print("新字符串:", str1.strip())
str2 = '@小远'
print("原字符串str2:", str2)
print("新字符串:", str2.strip('@'))
(2)lstrip()方法
lstrip()方法用于去掉字符串左侧的空格和特殊字符。
语法形式:
str.lstrip([chars])
示例:
str1 = '\t http://www.baidu.com '
print("原字符串str1:", str1)
print("新字符串:", str1.lstrip())
str2 = '@小远'
print("原字符串str2:", str2)
print("新字符串:", str2.lstrip('@'))
(3)rstrip()方法
rstrip()方法用于去掉字符串右侧的空格和特殊字符。
语法形式:
str.rstrip([chars])
示例:
str2 = '@小远.'
print("原字符串str2:", str2)
print("新字符串:", str2.rstrip('.'))
⑧格式化字符串
字符串对象提供了format()对字符串进行格式化。
语法形式:
str.format()
str用于指定字符串的显示样式(即模板);args用于要转换的项
示例:
template = '编号:{:0>9s}\t 公司名称:{:s}\t官网:http://www.{:s}.com'
context1 = template.format('7', '百度', 'baidu')
print(context1)