目录
在python中,有两种常用的字符串类型,分别为str和byte。这两种类型的字符串不能拼接在一起。
byte类型的数据是带有b前缀的字符串,例如,b'\xd2\xb0'。
1. 字符串编码转换
1.1 使用encode()方法编码
encode()方法为str对象的方法,用于将字符串转换为二进制数据(byte),也称为“编码”。
str = '爬虫入门'
byte1 = str.encode('GBK') #将GBK编码转换为二进制数据
byte2 = str.encode('utf-8') #将utf-8编码转换为二进制数据
print('原字符串:',str)
print('转换后:',byte1)
print('转换后:',byte2)
运行结果如下:
原字符串: 爬虫入门
转换后: b'\xc5\xc0\xb3\xe6\xc8\xeb\xc3\xc5'
转换后: b'\xe7\x88\xac\xe8\x99\xab\xe5\x85\xa5\xe9\x97\xa8'
1.2 使用decode()方法解码
decode()方法为bytes对象的方法,用于将二进制数据转换为字符串。
str = '爬虫入门'
byte1 = str.encode('GBK') #将GBK编码转换为二进制数据
byte2 = str.encode('utf-8') #将utf-8编码转换为二进制数据
str1 = byte1.decode('GBK') #解码
str2 = byte2.decode('utf-8') #解码
print('原字符串:',str)
print('转换后:',byte1)
print('转换后:',byte2)
print('解码后:',str1)
print('解码后:',str2)
运行结果如下:
原字符串: 爬虫入门
转换后: b'\xc5\xc0\xb3\xe6\xc8\xeb\xc3\xc5'
转换后: b'\xe7\x88\xac\xe8\x99\xab\xe5\x85\xa5\xe9\x97\xa8'
解码后: 爬虫入门
解码后: 爬虫入门
2. 字符串拼接
str1 ='大学毕业后我就'
num =22
str3 ='岁'
str4 ='了'
print(str1+str(num)+str3+str4) #字符串不允许与其他类型的数据直接拼接,需要使用str()转换
运行结果如下:
大学毕业后我就22岁了
3. 字符串长度
使用len()函数计算字符串长度。
str1 ='大学毕业后'
print(len(str1))
运行结果如下:
5
4. 截取字符串
str1 ='大学毕业后我就22岁了'
substr1 =str1[1] #截取第二个字符
substr2 =str1[5:] #从第6个字符截取
substr3 =str1[:4] #截取前4个字符
substr4 =str1[1:5]
print(substr1+'\n'+substr2+'\n'+substr3+'\n'+substr4)
运行结果如下:
学
我就22岁了
大学毕业
学毕业后
5. 分割字符串
把一个字符串按照指定的分隔符切分为字符串列表。
str.split(sep,maxsplit)
#str:要分割的字符串
#sep:分隔符
#maxsplit:分割次数
例如:
str = '大 学 毕 业 后,我,拿到了,***的offer/真的很高兴/哈哈'
list1 = str.split() #默认采用空白符分割
list2 = str.split(',',2) #采用','分割2次 #字符串中的“,”为中文符号,分隔符为英文“,”,因此输出结果不会变化,如果执意分割,将此处更改为str1 = '大 学 毕 业 后,我,拿到了,***的offer/真的很高兴/哈哈'#,为英文输入符号的逗号
list3 = str.split('/',1) #采用'/'分割1次
print(list1)
print(list2)
print(list3)
运行结果如下:
['大', '学', '毕', '业', '后,我,拿到了,***的offer/真的很高兴/哈哈']
['大 学 毕 业 后,我,拿到了,***的offer/真的很高兴/哈哈']
['大 学 毕 业 后,我,拿到了,***的offer', '真的很高兴/哈哈']
6. 合并字符串
合并字符串不同于拼接字符串,它会将多个字符串采用固定的分割符连接在一起。
语法格式如下:
strnew = str.join(iterable)
#strnew:新字符串
#str:指定合并时的分隔符
#iterable:可迭代对象,该迭代对象中的所有元素将被合并为一个新的字符串
例如:
list = ['小明','小红','小王']
str1 = '@'.join(list)
str2 = '@'+str1
print(str1)
print(str2)
运行结果如下:
小明@小红@小王
@小明@小红@小王
7. 检索字符串
7.1 count
conut()方法用于检索指定字符串在另一个字符串中出现的次数。
str1 = '@小明@小红@小王'
str2 = 'b\0dx\abcd\d'
num1 = str1.count('@')
num2 = str2.count('d')
print(num1)
print(num2)
运行结果如下:
3
3
7.2 find
find()方法用于检索是否包含指定字符串。如果检索的字符串不存在,则返回-1;否则返回首次出现该字符串时的索引。
str1 = '@小明@小红@小王'
str2 = 'b\0dx\abcd\d'
num1 = str1.find('@')
num2 = str2.find('d')
print(num1)
print(num2)
运行结果如下:
0
2
7.3 index
index()方法与find()方法类似,用于检索是否包含指定字符串。
str1 = '@小明@小红@小王'
str2 = 'b\0dx\abcd\d'
num1 = str1.index('小')
num2 = str2.index('b')
print(num1)
print(num2)
运行结果如下:
1
0
7.4 startswith和endswith
startswith()方法和endswith()方法用于检索字符串是否以指定字符串开头和结尾。如果是返回Ture,否则返回False。
str2 = 'b\0dx\abcd\d'
print(str2.startswith('b'))
print(str2.startswith('x'))
print(str2.endswith('d'))
print(str2.endswith('x'))
运行结果如下:
True
False
True
False
8. 字母大小写转换
str = 'WWW.baidu.com'
print('全部转换为小写:',str.lower())
print('全部转换为大写:',str.upper())
运行结果如下:
全部转换为小写: www.baidu.com
全部转换为大写: WWW.BAIDU.COM
9. 去除字符串中的空格和特殊字符
特殊字符是指制表符\t、按Enter键符\r、换行符\n等。
str1 = '\t\n\r WWW.baidu.com \t\n\r'
str2 = ' \t\n\r WWW.baidu.com'
str3 = 'WWW.baidu.com \t\n\r '
str7 = '@.小明@小红@小王.'
str4 = str1.strip() #去掉字符串左右两侧的空格和特殊字符
str5 = str2.lstrip() #去掉字符串左侧的空格和特殊字符
str6 = str3.rstrip() #去掉字符串右侧的空格和特殊字符
str8 = str7.strip('@.') #去掉字符串左右两侧的空格和特殊字符
print(str4)
print(str5)
print(str6)
print(str8)
运行结果如下:
WWW.baidu.com
WWW.baidu.com
WWW.baidu.com
小明@小红@小王
10. 格式化字符串
10.1 使用%操作符
在python中,可以使用%操作符实现格式化字符串,语法格式如下:
'%[-][+][0][m][.n]格式字符'%exp
#-:可选参数,用于指定左对齐,正数前面无符号,负数前面加负号。
#+:可选参数,用于指定右对齐,正数前面加正号,负数前面加负号。
#0:可选参数,用于指定右对齐,正数前面无符号,负数前面加负号,用0填充空白处。
#m:可选参数,表示占有宽度。
#.n:可选参数,表示小数点后保留的位数。
#格式字符:指定类型。
#exp:要转换的项。如果转换的项有多个,需要通过元组的形式进行指定,不能使用列表。
格式字符 | 说明 |
%s | 字符串(采用str()显示) |
%c | 单个字符 |
%d或者%i | 十进制整数 |
%x | 十六进制整数 |
%f或者%F | 浮点数 |
%r | 字符串(采用repr()显示) |
%o | 八进制整数 |
%e | 指数(基底为e) |
%E | 指数(基底为E) |
%% | 字符% |
例如:
template= '编号:%09d\t公司名称: %s\t官网: http://www.%s.com' #模板
context1 = (7,'百度','baidu') #要转换的内容
context2 = (1117,'百度','baidu') #要转换的内容
print(template%context1)
print(template%context2)
运行结果如下:
编号:000000007 公司名称: 百度 官网: http://www.baidu.com
编号:000001117 公司名称: 百度 官网: http://www.baidu.com
10.2 format()方法
字符串对象提供了format()方法对字符串进行格式化。
语法格式如下:
str.format(args)
#str:指定字符串的显示样式(模板)。
#args:指定转换的项。
模板创建:
{[index][:[[fill]align][sign][#][width][.precision][type]]}
#index:可选参数,用于指定要设置格式的对象在参数列表中的索引位置,索引值从0开始。
#fill:可选参数,指定空白处填充的字符。
#align:可选参数,用于指定对齐方式("<"表示内容左对齐;">"表示内容包括符号)右对齐;"="只对数值类型有效,表示内容右对齐,
# 如果是负数,则将负数放在填充内容的最左侧,如果是正数,不添加负号;"^"表示内容居中)。
#sign:可选参数,用于指定有无符号数(+表示整数加正号,负数加负号;-表示正数不变,负数加负号;值为空格表示正数加空格,负数加负号)。
##:可选参数,对于二进制、八进制、十六进制,如果加上#,表示会显示0b/0o/0x前缀,否则不显示前缀。
#width:可选参数,用于指定所占宽度。
#.precision:可选参数,用于指定保留的小数位数。
#type:可选参数,用于指定类型。如下表所示:
格式字符 | 说明 |
S | 对字符串类型格式化 |
D | 十进制整数 |
C | 将十进制整数自动转换成对应的Unicode字符 |
e或E | 转换为科学计数法表示再格式化 |
g或G | 自动在e和f,或者E和F中切换 |
b | 将十进制整数自动转换成二进制表示再格式化 |
o | 将十进制整数自动转换成八进制表示再格式化 |
x或X | 将十进制整数自动转换成十六进制表示再格式化 |
f或F | 转换为浮点数(默认小数点后保留六位)再格式化 |
% | 显示百分比(默认显示小数点后六位) |
例如:
template = '编号: {:0>9s}\t公司名称: {:s}\t官网: http://www.{:s}.com' #模板
context1 = template.format('127','百度','baidu')
print(context1)
运行结果如下:
编号: 000000127 公司名称: 百度 官网: http://www.baidu.com