字符串格式化用来把整数、实数、列表等对象转化为特定格式的字符串。
Python中字符串格式化的格式如下:
‘%[-][+][0][m][.n]格式字符’%x
%符号之前的字符串为格式字符串,之后的部分为需要进行格式化的内容
‘%[-][+][0][m][.n]格式字符’%x
从右到左:
Python支持大量的格式字符,常见的格式字符如下:
str()主要用来为终端用户输出一些信息,而repr()主要用来调试;同时后者的目标是为了消除一些歧义(例如浮点数的精度问题),前者主要为了可读。
符号>表示右对齐,符号^表示居中,符号<表示右对齐
Python 3.6.x 以后的版本支持在数字常量的中间位置使用单个下划线作为分隔符来提高可读性
可以使用 dir(“”)查看字符串操作所有方法列表,使用内置函数 help()查看每个方法的帮助。字符串也是 Python 序列的一种,除了本节介绍的字符申处理方法,很多 Python
内置函数也支持对字符串的操作,例如用来计算序列长度的 len()函数,求最大值的 max()
函数,字符串编码方法 encode()和字节串解码方法 decode()。
1. find().rfind()、index().rindex().count()
find()和 rfind()方法分别用来查找一个字符串在当前字符串指定范围(默认是整个字符串)中首次和最后一次出现的位置,如果不存在则返回-1;
index()和 rindex()方法用来返回一个字符串在当前字符串指定范围中首次和最后一次出现的位置,如果不存在则抛出异常;
count()方法用来返回一个字符串在当前字符串中出现的次数,不存在返回0。
2.split(),rsplit(),partition(),rpartition()
split()和rsplit()方法分别用来以指定字符为分隔符,从字符串左端和右端开始将其分隔成多个字符串,返回包含分隔结果的列表;partition()和rpartition()用来以指定字符串为分隔符将原字符串分隔为 3 部分,分别为分隔符前的字符串,分隔符字符串、分隔符后的字符串,如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串组成的元组。
partition()方法只分隔一次
split()方法自动删除分隔结果中的字符串
join()方法用来将列表或其他可迭代对象中多个字符串进行连接,并在相邻字符串之间插入字符串
另外,这两个方法还可以接受一个包含若干字符串的元组作为参数来表示前缀或后缀,例如,下面的代码可以列出D盘根目录下所有扩展名为bmp、jpg或gif的图片
import os
[filename for filename in os.listdir(r'D:\\') if
filename.endswith(('.bmp','.jpg','.gip'))]
下面的代码演示了8位长度随机密码生成算法的原理:
random是与随机数有关的的Python标准库,除了用于从序列中任意选择有关元素的函数 choice(),还提供了用于生成指定二进制位数的随机整数的函数 getrandbits(),生成指定范围内随机数的函数 randrange()和 randint(),列表原地乱序函数 shuffle().从序列中随机选择指定数量不重复元素的函数 sample()、返回[0,1]区间内符合 beta 分布的随机数函数 betavariate()、符合 gamma 分布的随机数函数 gammavariate()、符合 gauss 分布的随机数函数 gauss()、从指定分布中选取k个允许重复的元素的函数 choices()等,同时还提供
了 SystemRandom 类支持生成加密级别要求的不可再现伪随机数序列。
在Python中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能重新创建一个新的字符串对象。
如果确实需要一个支持原地修改的Unicode数据对象,可以使用io.StringIO对象或array模块。
正则表达式由元字符及其他不同组合来构成,通过巧妙地构建正则表达式考科一匹配任意字符串。
常用的正则表达式常用元字符如下:
在Python中,主要使用re模块来失陷正则表达式的操作。
re模块的常用函数如下,具体使用时,既可以直接使用re模块的函数进行字符串处理,也可以将模块变异为正则表达式对象,然后使用正则表达式对象的方法来操作字符串。
其中,函数参数flags的值可以是re,I(忽略大小写)、re.L、re.M(多行匹配模式)、re.S(使元字符‘.’匹配任意字符,包括换行符)、re.U(匹配Unicode字符)、re.X(忽略模式中的空格,并可以使用#注释)的不同组合(使用“|”进行组合)
可以使用re模块的函数来实现正则表达式操作
import re #导入re模块
text='alpha.beta...gamma delta'
re.split('[\. ]+',text) #空格和点作为分隔符
re.split('[\. ]+',text,maxsplit=2) #最多分隔两次
re.split('[\. ]+',text,maxsplit=1)
pat='[a-zA-Z]+' #所有英文字母
re.findall(pat,text) #查找所有单词
pat='{name}'
text='Dear {name}...'
re.sub(pat,'Mr.Dong',text) #字符串替换
s='a,s,d'
re.sub('a|s|d','good',s) #出现a或者s或者d,替换成good
s="It's a very good good idea"
re.sub(r'(\b\w+) \1',r'\1',s) #处理连续的重复单词,第一个\1表示前面的单词又出现一次,删掉空格和重复单词
re.sub(r'((\w+) )\1',r'\2',s) #((\w+))中,第一层括号里表示第一个子模式,第二层括号里表示第二个子模式
re.sub('a',lambda x:x.group(0).upper(),'adkjhakshas askas aasdkjfh')
持续更新中…