字符串
字符串 是Python中的 不可变 数据类型
1.字符串相关处理方法
- 大小写转换
# 大小写转换
s1='HelloWorld'
new_s2=s1.lower()
print(s1,new_s2)
new_s3=s1.upper()
print(new_s3)
结果:
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap6\示例6-1字符串的相关处理方法1.py
HelloWorld helloworld
HELLOWORLD
- 字符串的分隔
e_mail='2624137649@qq.com'
lst=e_mail.split('@')
print('邮箱名:',lst[0],'邮箱服务器域名:',lst[1])
结果:
邮箱名: 2624137649 邮箱服务器域名: qq.com
- 判断前缀和后缀
s1='HelloWorld'
print(s1.startswith('H')) #True
print(s1.startswith('P')) #False
print('demo.py'.endswith('.py'))
print('demo.text'.endswith('.text'))
结果:
True
False
True
True
- 字符串的替换
s='HelloWorld'
#字符串的替换
new_s=s.replace('o','你好',1) #最后一个参数是替换次数,默认是全部替换
print(new_s)
结果:
Hell你好World
- 字符串在指定的宽度范围内居中
s='HelloWorld'
print(s.center(20))
print(s.center(20,'*'))
结果:
HelloWorld
*****HelloWorld*****
注:第一个HelloWorld 左右两边都有空格的
- 去掉字符串左右的空格
s=' Hellow world '
print(s.strip())
print(s.lstrip()) #去掉字符串左侧的空格
print(s.rstrip()) #去掉字符串右侧的空格
结果:
Hellow world
Hellow world
Hellow world
- #去掉指定的字符
s3='dl-Helloworld'
print(s3.strip('ld')) #与顺序无关 -Hellowor
print(s3.lstrip('ld')) # -Helloworld
print(s3.rstrip('dl')) # dl-Hellowor
结果:
-Hellowor
-Helloworld
dl-Hellowor
2.格式化字符串
- 使用占位符进行格式化
name='马冬梅'
age=18
score=98.5
print('姓名:%s,年龄:%d,成绩:%f' % (name,age,score))
结果:
姓名:马冬梅,年龄:18,成绩:98.500000
此时成绩后面有很多小数点 00000怎么办?
那我们就精确一下位数,更改代码:
print('姓名:%s,年龄:%d,成绩:%.1f' % (name,age,score))
结果:
姓名:马冬梅,年龄:18,成绩:98.5
- f-string
name='马冬梅'
age=18
score=98.5
print(f'姓名:{name},年龄:{age},成绩:{score}')
结果:
姓名:马冬梅,年龄:18,成绩:98.5
- 使用字符串的 format 方法 #0、1、2 相当于索引
name='马冬梅'
age=18
score=98.5
print('姓名:{0},年龄:{1},成绩:{2}'.format(name,age,score))
print('姓名:{2},年龄:{0},成绩:{1}'.format(age,score,name))
结果:
姓名:马冬梅,年龄:18,成绩:98.5
姓名:马冬梅,年龄:18,成绩:98.5
3.字符串的编码和解码
将str类型转换成 bytes 类型,需要用到字符串的 encode()方法
注:errors=‘strict/ignore/replace’ 里面是 分别是三种编码和解码出错时,出现的三种反应的模式
- 编码:
s='伟大的中国梦'
#编码 str->bytes
scode=s.encode(errors='replace') #默认是utf-8,因为 utf-8中文占3个字节
print(scode)
结果:
b'\xe4\xbc\x9f\xe5\xa4\xa7\xe7\x9a\x84\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa2\xa6'
gbk:
scode_gbk=s.encode('gbk',errors='replace')
print(scode_gbk)
结果:
b'\xce\xb0\xb4\xf3\xb5\xc4\xd6\xd0\xb9\xfa\xc3\xce'
- 编码中的出错问题:
(这里我们想办法去找一个图标)
(1).replace
s2='耶🤮'
scode_error=s2.encode('gbk',errors='replace') #strict
print(scode_error)
结果:
b'\xd2\xae?'
在 replace 模式下这种图标编程一种: 问号
(2). ignore (忽略)
s2='耶🤮'
scode_error=s2.encode('gbk',errors='ignore') #strict
print(scode_error)
结果:
b'\xd2\xae'
它就忽略了
(3). strict
s2='耶🤮'
scode_error=s2.encode('gbk',errors='strict') #strict
print(scode_error)
结果:
Traceback (most recent call last):
File "D:\Python_Home\chap6\示例6-5字符串的编码和解码.py", line 17, in <module>
scode_error=s2.encode('gbk',errors='strict') #strict
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'gbk' codec can't encode character '\U0001f92e' in position 1: illegal multibyte sequence
报错了
- 解码 bytes->str
print(bytes.decode(scode_gbk,'gbk'))
print(bytes.decode(scode,'utf-8'))
结果:
伟大的中国梦
伟大的中国梦
4.数据的验证
- 判断是否为数字
print('123'.isdigit()) #True
print('一二三'.isdigit()) #False
print('02j223'.isdigit()) #False
- 所有字符都是数字
print('1234'.isnumeric()) #True
print('一二三'.isnumeric()) #True
print('02j223'.isnumeric()) #False
print('壹贰叁'.isnumeric()) #True
中文的 "一二三"和 “壹贰叁” 都是可以识别的
- 所有字符都是字母(包含中文字符)
print('hello你好'.isalpha()) #True
print('hello你好123'.isalpha()) #False
print('hello你好一二三'.isalpha()) #True
print('hello你好壹贰叁'.isalpha()) #True
- 所有字符都是数字或字母
print('hello你好'.isalnum()) #True
print('hello你好123'.isalnum()) #False
print('hello你好一二三'.isalnum()) #True
print('hello你好壹贰叁'.isalnum()) #True
- 所有字符都是首字母大写
print('Hello'.istitle()) #True
print('HelloWorld'.istitle()) #False
print('Helloworld'.istitle()) #True
print('Hello World'.istitle()) #True
print('Hello world'.istitle()) #False
- 判断是否都是空白字符
print('\t'.isspace()) #True
print(' '.isspace()) #True
print('\n'.isspace()) #True
字符串的拼接
- 使用+号
s1='hello'
s2='world'
print(s1+s2)
- 使用字符串的 join()方法
s1='hello'
s2='world'
print(''.join([s1,s2]))
print('*'.join(['hello','world','python','java','php']))
结果:
helloworld
hello*world*python*java*php
- 直接拼接
print('hellow''world')
- 使用格式化字符串进行拼接
s1='hello'
s2='world'
print('%s%s' % (s1,s2))
print(f'{s1}{s2}')
print('{0}{1}'.format(s1,s2))
字符串的去重
s='helloworldhelloworlddasdfrgrtg5fefrf'
#字符串拼接及 not in
new_s=''
for item in s:
if item not in new_s:
new_s+=item #拼接
print(new_s)
#使用索引 + not in
new_s2=''
for i in range(len(s)):
if s[i] not in new_s2:
new_s2+=s[i]
print(new_s2)
# 通过集合去重+列表排序
new_s3=set(s)
lst=list(new_s3)
lst.sort(key=s.index)
print(''.join(lst))
结果:
D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap6\示例6-8字符串的去重操作.py
helowrdasfgt5
helowrdasfgt5
helowrdasfgt5