python -- 字符串操作
- capitalize 首字母大写
name = "name"
# 让str的首字母大写
print(name.capitalize())
- count 统计字符串里有多少个需要查找的元素
name = "name"
# 统计str中有几个,数值返回类型是int
print(name.count('a'))
- center
name = "name"
# 需要50个字符,中间有name,其他用-填充
print(name.center(50, '-'))
- encode
name = "na\tme"
# 转换成二进制
print(name.encode())
- decode
name2 = b'na\tme'
# 反转换,但是变量一定要是byte类型,不然无法使用
print(name2.decode())
- endswith
name = "name"
# 判断str的是以什么为结尾吗?返回值是布尔类型
print(name.endswith("e"))
- startswith
- expandtabs 将srt里面的\t(tab键)用制定数量的tab键填充
name = "na\tme"
# 将tab键的长度调整为2,其实一个tab的长度就是2或4
print(name.expandtabs(2))
# tabsize可以不写,因为位置参数
print(name.expandtabs(tabsize=4))
print(name)
#将tab键的长度调整为6,这样就有变化了
print(name.expandtabs(6))
- find
- rfind
name = "name name"
print('The len of {0} is '.format(name),len(name))
print('\033[31;1m--------------\033[0m')
# 从左边查找,最右边的a在第几个位置
print(name.find('a')) # 返回值:1
# 从左边查找,最右边me在第几个位置
print(name.find('me')) # 返回值:2
print('\033[32;1m--------------\033[0m')
# 从左边查找,最右边的a在第几个位置
print(name.rfind('a')) # 返回值:6
# 从左边查找,最右边的me在第几个位置
print(name.rfind('me')) # 返回值:7
find的切片用法
name = "name"
# 从左边查找a在第几个位置
print(name.find('a')) # 返回值:1
print(name[name.find('a'):4]) # 返回值:ame
print(name[:]) # 返回值:name,等同于print(name)
- format
name = "name: {0}, age: {1}, sex:{2}"
print(name.format('姓名','年龄','姓名'))
- format.map 支持字典式样的格式化,用的比较少
name = "我叫{name},我今年{age}岁,我的工作是{job}"
print(name.format_map({'name':'Gao','age':20,'job':'clerk'}))
- index 检索位置
name = "我叫{name},我今年{age}岁,我的工作是{job}"
print(name.index('n')) # 返回值:3
index的切片用法
name = "我叫{name},我今年{age}岁,我的工作是{job}"
print(name.index('n')) # 返回值:3
#用index做str的切片
print(name[name.index('n'):7]) # 返回值:name
- isalnum 检查str是否包含阿拉伯字符(数字有属于阿拉伯),如果有特殊符就返回False
name = 'abd123'
name2 = 'qazwsx'
name3 = '@qazwsx'
print(name.isalnum()) #返回值:True
print(name2.isalnum()) #返回值:True
print(name3.isalnum()) # 返回值:False
- isalpha 检查str是否只包含字母
name = 'abd123'
name2 = 'qazwsx'
name3 = '@qazwsx'
print(name.isalpha()) # 返回值:False
print(name2.isalpha()) # 返回值:True
print(name3.isalpha()) # 返回值:False
- isdecimal 检查str是否是包含十进制
name = 'abd123'
name2 = '123456'
# 字符串是否只包含十进制字符返回True,否则返回False
print(name.isdecimal()) # 返回值:False
print(name2.isdecimal()) # 返回值:True
- isdigit 检查str是否是数字
name = 'abd123'
name2 = '123456'
# 字符串是否是数字
print(name.isdigit()) # 返回值:False
print(name2.isdigit()) # 返回值:True
- isidentifier 检查是不是一个合法的标识符,就是看是否合法的变量名
name = 'abd123'
name2 = '123456'
name3 = '好人'
# 字符串是否是一个合法的变量名
print(name.isidentifier()) # 返回值:True
print(name2.isidentifier()) # 返回值:False
print(name3.isidentifier()) # 返回值:True
- isnumeric 类似isdigit,不建议使用
- isspace
name = 'abd 123'
name2 = ' '
# 检查str是否是空格
print(name.isspace()) # 返回值:Fasle
print(name2.isspace()) # 返回值:True
- title
- istitle
name = 'abd 123'
name2 = 'IAMNICEGUY'
name3 = 'I AM NICE GUY'
name4 = 'I Am Nice Guy'
# 检查str是不是一个主题
print(name.istitle()) # 返回值:Fasle
print(name2.istitle()) # 返回值:Fasle
print(name3.istitle()) # 返回值:Fasle
print(name4.istitle()) # 返回值:True
# title()将str转换成title
print(name.title()) # Abd 123
- isprintable 字符串是不是可打印,只要不是tty文件或驱动文件,都可以打印。
name = 'abd 123'
# 判断str是否可以打印,只要不是tty,驱动文件,都可以打印
print(name.isprintable()) # 返回值: True
- isupper
name = 'abd123'
name2 = '123456'
name3 = '好人'
name4 = 'ABC'
# 字符串是否是小写
print(name.islower()) # 返回值:True
print(name2.islower()) # 返回值:False
print(name3.islower()) # 返回值:False
print(name4.islower()) # 返回值:False
- islower
name = 'abd123'
name2 = '123456'
name3 = '好人'
name4 = 'ABC'
# 字符串是否是大写
print(name.isupper()) # 返回值:False
print(name2.isupper()) # 返回值:False
print(name3.isupper()) # 返回值:False
print(name4.isupper()) # 返回值:True
- join 比较常用
name = ['a', 'b', 'c', '1', '2', '3']
name2 = 'abc123'
print(''.join(name)) # 返回值:abc123
print(' '.join(name)) # 返回值:a b c 1 2 3
print('='.join(name)) # 返回值:a=b=c=1=2=3
# 将原有的srt嵌在join里面,注意join里面的内容不能只有一个
print(name2.join('==')) # 返回值:=abc123=
print(name2.join('+++')) # 返回值:+abc123+abc123+
- ljust
- rjust
name = 'abc123'
#保证一句从左边开始,且长度保证是5,如果不足用#补
print(name.ljust(5,'#')) # abc123
#保证一句从右边边开始,且长度保证是5,如果不足用#补
print(name.rjust(5,'#')) # abc23
#保证一句从左边开始,且长度保证是10,如果不足用#补
print(name.ljust(10,'#')) # abc123####
#保证一句从右边开始,且长度保证是10,如果不足用#补
print(name.rjust(10,'#')) # ####abc123
- lower 将str全部转成小写
- upper 将str全部转成大写
- swapcase 将str大写转小写,小写转大写
name = 'abc123ABC'
print(name.lower()) # abc123abc
print(name.upper()) # ABC123ABC
print(name.swapcase()) # ABC123abc
- lstrip 取掉左边的回车或空格,中间的不管
- rstrip 取掉右边的回车或空格,中间的不管
- strip 掉两边的回车或空格,中间的不管
name = '\nabc\n123\n'
print('-------') # black
print(name)
print('\033[32;1m-------\033[0m') # green
# 取掉左边的回车或空格
print(name.lstrip())
print('\033[31;1m-------\033[0m') # red
# 取掉右边的回车或空格
print(name.rstrip())
print('\033[33;1m-------\033[0m') # yellow
# 取掉两边的回车或空格
print(name.strip())
print('\033[34;1m-------\033[0m') # blue
- striplines
- makestrans
- translate
name = 'Whatever is worth doing is worth doing well.'
# p = {97: 49, 98: 50, 99: 51, 100: 52, 101: 53, 102: 54}
p = str.maketrans('abcdef','123456')
# 将p字典内的ASCII码重新通过translate传给name用
print(name.translate(p)) # Wh1t5v5r is worth 4oing is worth 4oing w5ll.
- replace
name = 'Whatever is worth doing is worth doing well.'
# 将srt中的a换成@,默认是都更换
print(name.replace('a','@'))
# 将str中的o换成0,只更换2个(从左到右)
print(name.replace('o','0',2))
# 将str中的i换成1,这样是所有的i都替换成1
print(name.replace('i','1',-2))
- split
name = "name1 name2"
name2 = "name1|name2"
name3 = "name|name"
# split默认将空格作为分割,同时去除了空格,生成一个列表
print(type(name.split()),name.split()) # <class 'list'> ['name1', 'name2']
# split将 | 作为分割,并生成列表
print(name2.split('|')) # ['name1', 'name2']
# split将 me 作为分割,并生成列表
print(name3.split('me')) #['na', '|na', '']
- splitlines 适应在不同系统中的换行,将字符串用换行分割,并生成列表
name = "name1\nname2"
# splitlines 按换行符号分割,并生成列表
print(name.splitlines()) # ['name1', 'name2']
print(name.split('\n')) # 等同上面的代码
- zfill 不足长度用0补。一般用于二进制位数不足时用
name = 'abc123'
print("Name's len is ",len(name))
# 将字符串的长度变成10位,不足的用0补
print(name.zfill(10)) # 0000abc123
# 将字符串的长度变成5位,不足的用0补
print(name.zfill(5)) # abc123
写在后面
- 字符串也可以切片,因为find,rfind和index
- join的用法,需要掌握。
- makestrans 和translate可以玩出来随机字符串,且加密的效果,结合random模块一起。
- replace,旧在前,新在后,数量是正数。
- splitlines,并非多此一举,在linux上,回车是\n,在windowns上,回车是\r\n
- zfill,一般用在16进制填充需要。