字符串是不可变数据类型
方法名 | 描述说明 |
---|---|
str.lower() | 将str字符串全部转成小写字母并产生一个新的字符串,str字符串保持不变 |
str.upper() | 将str字符串全部转成大写字母并产生一个新的字符串,str字符串保持不变 |
str.split(sep=None) | 将str按照指定的分隔符sep进行分隔,产生一个新列表类型,原字符串不变 |
str.count() | sub这个字符串在str中出现的次数 |
str.find(sub) | 查询sub这个字符串在str中是否存在,若不存在返回-1,若存在返回sub首次出现的索引 |
str.index(sub) | 功能与find相同,区别在于要查询的子串sub不存在时,程序报错 |
str.startwith(s) | 查询字符串str是否以子串s开头 |
str.endwith(s) | 查询字符串str是否以子串s结尾 |
str.replace(old,news) | 使用news字符串替换字符串s中所有old字符串,结果是一个新的字符串 |
str.center(width,fillchar) | 字符串str在指定的宽度范围内居中,可以使用fillchar进行填充 |
str.join(iter) | 在iter中的每个元素后面都增加一个新的字符串str |
str.strip(chars) | 从字符串中去掉左侧和右侧chars中列出的字符串 |
str.lstrip(chars) | 从字符串中去掉左侧chars中列出的字符串 |
str.rstrip(chars) | 从字符串中去掉右侧chars中列出的字符串 |
代码实例:
# 大小写相互转换
s1='HelloWorld'
s2=s1.lower()
print(s1)
print(s2)
s3=s1.upper()
print(s3)
# 字符串的分隔
e_mail='[email protected]'
lst=e_mail.split('@')
print(e_mail)
print(lst[0],lst[1])
# 统计子串'o'出现的次数
print(s1.count('o'))
print(s1.count('m')) # 不存在的字符返回0
# 字符串的检索操作
print(s1.find('o')) # 若存在,找到首次出现的索引
print(s1.find('m')) # 若不存在,返回-1
print(s1.index('o'))
#print(s1.index('m')) # 'm'不存在于s1中
# 判断前缀和后缀
print('demo.py'.endswith('.py'))
print('text.txt'.endswith('.txt'))
print(s1.startswith('H'))
print(s1.startswith('P'))
s='HelloWorld'
# 字符串的替换
s1=s.replace('o','你好') # 第三个参数是替换几次,若未指定则是替换所有
print(s)
print(s1)
s2=s.replace('o','你好',1)
print(s2)
# 字符串在指定的宽度范围内居中
print(s.center(20))
print(s.center(20,'*'))
# 去掉字符串左右的空格
s=' Hello World '
print(s)
print(s.strip(' ')) # 左右两侧的空格都被去掉了
print(s.lstrip(' ')) # 只取掉左侧的空格
print(s.rstrip(' ')) # 只取掉右侧的空格
# 去掉指定的字符
s='dl-HelloWorld'
print(s.strip('ld')) # 与顺序无关,任何一种顺序都可以
print(s.lstrip('ld'))
s='dlr-HelloWorld'
print(s.strip('rld'))
s='rdl-HelloWorld'
print(s.strip('rld'))
%s:字符串格式
%d:十进制整数格式
%f:浮点数格式
%.1f:小数位数为1的浮点数格式
使用 f'字符串' 和 {} 标明被替换的字符
模板字符串.format(逗号分隔的参数)
# 1、使用占位符进行格式化
name='马冬梅'
age=18
score=98.5
print('姓名;%s,年龄:%d,成绩:%f' % (name,age,score))
print('姓名;%s,年龄:%d,成绩:%.1f' % (name,age,score)) # 通过使用%.1f控制小数点位数
# 2、f-string python3.6之后可以用
print(f'姓名:{name},年龄:{age},成绩:{score}')
# 3、使用字符串的format方法
print('姓名:{0},年龄:{1},成绩:{2}'.format(name,age,score))
print('姓名:{2},年龄:{0},成绩:{1}'.format(age,score,name))
格式化字符串的详细格式
: | 填充 | 对齐方式 | 宽度 | , | .精度 | 类型 |
---|---|---|---|---|---|---|
引导符号 | 用于填充单个字符 | <左对齐,>右对齐,^居中对齐 | 字符串的输出宽度 | 数字的千位分隔符 | 浮点数小数部分的精度或字符串的最大输出长度 | 整数类型:b\d\o\x\X,浮点数类型:e\E\f\% |
代码实例:
s='HelloWorld'
print('{0:*<20}'.format(s))
print('{0:*>20}'.format(s))
print('{0:*^20}'.format(s))
print(s.center(20,'*'))
# 千位分隔符(只适用于整数和浮点数)
print('{0:,}'.format(123456789))
print('{0:,}'.format(123456789.123456))
# 浮点数小数部分的精度
print('{0:.2f}'.format(3.1415926))
# 字符串类型表示最大的显示长度
print('{0:.5}'.format('helloworld')) # hello
# 整数类型
a=425
print('二进制:{0:b},十进制:{0:d},八进制:{0:o},十六进制:{0:d}'.format(425))
# 浮点数类型
b=3.1415926
print('{0:.2f},{0:.2E},{0:.2e},{0:.2%}'.format(b))
str:字符串类型
bytes:二进制类型
字符串的网络传输:
str -> bytes -> str
str -> bytes是字符串编码的过程
bytes -> str是字符串解码的过程
字符串的编码:
将str类型转换成bytes类型,需要使用到字符串encode()方法
str.endcode(encoding='utf-8',errors='strict/ignore/replace')
字符串的解码:
将bytes类型转换成str类型,需要使用到bytes类型的decode方法
bytes.decode(encoding='utf-8',errors='strict/ignore/replace')
strict,ignore,replace是执行出错的处理方案:
strict:执行出错就报错
ignore:执行出错忽略错误
replace:执行出错时将出错的地方使用?
替代
默认是 strict
代码实例:
s='伟大的中国梦'
# 编码:str->bytes
s_code=s.encode(errors='replace') # encoding默认是utf-8,因为utf-8中文占3个字节
print(s_code)
s_code_gbk=s.encode(encoding='GBK',errors='replace') # gbk编码中一个中文占两个字节
print(s_code_gbk)
# 编码中的出错问题
s2='耶♬'
s2_code=s2.encode(encoding='GBK',errors='ignore')
print(s2_code)
# 出错处理变成严格后,这里会报错
#s2_encode=s2.encode('gbk',errors='strict')
s2_encode=s2.encode('gbk',errors='replace')
print(s2_encode)
# 解码:bytes->str
print(s_code_gbk.decode('gbk'))
print(s2_encode.decode('gbk'))
指程序对用户输入的数据进行合法性验证
方法名 | 描述说明 |
---|---|
str.isdigit() | 所有字符都是数字(阿拉伯数字)只能是十进制的阿拉伯数字 |
str.isnumeric() | 所有字符都是数字,可以是阿拉伯数字,罗马数字,中文一二三四这些 |
str.isalpha() | 所有字符都是字母(包含中文字符) |
str.isalnum() | 所有字符都是数字或者字母 |
str.islower() | 所有字符都是小写 |
str.isupper() | 所有字符都是大写 |
str.istitle() | 所有字符都是首字母大写 |
str.isspace() | 所有字符都是空白字符 |
代码实例:
# isdigit() 只识别十进制的阿拉伯数字
print('123'.isdigit())
print('一二三'.isdigit())
print('0b101'.isdigit()) # F
print('Ⅰ'.isdigit()) # F
# 是数字就行,罗马数字,阿拉伯数字,中文数字,人民币数字
print('123'.isnumeric())
print('一二三'.isnumeric())
print('0b101'.isnumeric()) # F
print('Ⅰ'.isnumeric()) # T
print('壹'.isnumeric()) # T
print('-'*100)
# 所有字符都是字母(包含中文字符)
print('hello大家'.isalpha())
print('hello大家123'.isalpha()) # F
print('hello大家一二三'.isalpha()) # T
print('hello大家ⅠⅠⅠ'.isalpha()) # F
# 所有字符是数字或者字母
print('123'.isnumeric())
print('一二三'.isnumeric())
print('0b101'.isnumeric()) # F
print('Ⅰ'.isnumeric()) # T
print('壹'.isnumeric()) # T