1.8.12.格式化字符转
-
概念:格式化字符串是指指定一个模板,该模板留出一些空位,再根据需要填上相应的内容
-
通过操作符%实现:''% [-][+][0[m][.n]'格式化字符串%exp
-
参数说明:
-
[ ]:表示内容可选
-
-:左对齐
-
+:右对齐
-
0:右对齐,用0填充空白,一般配合参数m使用
-
m:宽度
-
n:小数保留数
-
%格式化字符如下表:
-
格式化字符 | 作用 | 格式化字符 | 作用 |
---|---|---|---|
%s | 字符串 | %r | 字符串 |
%c | 单个字符 | %o | 八进制 |
%d或%i | 十进制整数 | %e | 指数 |
%x | 十六进制整数 | %E | 指数 |
%f或%F | 浮点数 | %% | 字符% |
str1='编号:%05d\t公司名称:%s官网:http://www.%s.com'
str2=(1,'百度','baidu')
str3=(2,'腾讯','qq')
str4=(3,'字节跳动','bytedance')
print(str1%str2)
print(str1%str3)
print(str1%str4)
1.8.13.通过format()方法实现
python2.6版本以后推荐使用format()方法格式化字符串
格式:str.format(args)
参数分析
str:字符串显示的样式即模板
grgs:需要转换的对象,若有多项可以使用逗号分隔
占位符:{}和:
模板格式:{index:fill aglin sign # width.percision type}
index:索引位置,从0开始,若省略则自动分配
fill:空白填充的字符
aglin:对齐方式,一般与width配合
<:左对齐
>:右对齐
=:内容右对齐,只对数字类型有效,即将数字放在填充字符的最右侧
^:内容居中
sign:指定有无符号
+:正数
负数
空格:正数加正数,负数加符号
#:值为二、八、十六进制时,数字显示0b、0o、0x的前缀
width:宽度
.percision:保留的小数位数
type:类型
import math as m
print('¥{:,.2f}元'.format(2000000 + 2345))
print('{0:E}'.format(230000.1))
print('{:.7f}'.format(m.pi))
print('二进制:{:#b}'.format(1001))
print('八进制:{:#o}'.format(1001))
print('十六进制:{:#x}'.format(1001))
print('天才是由{:.0%}的灵感,加上{:.0%}的汗水!'.format(0.01,0.99))
1.8.14.python常见的字符串编码
-
ASCLL码:对10个数字、52英文大小写字母、其他字符进行编号,最多表示256个字符,每个字符占1B
-
GBK\GBK2312:中文汉字编码,1B表示英文字母,2B表示汉字
-
Unicode和UTF-8的关系
-
Unicode:称为万国码、统一码,用于满足跨国语言、跨平台的文件转换处理要求
-
unicode表示字符太浪费空间,为了解决字符的存储和传输问题而产生了UTF编码
-
-
UTF:(unicode transformation format):对unicode进行转换,以便于在存储和传输时节省空间和时间
-
UTF-8:使用1、2、3、4个字节表示字符,有先使用1B表示字符,无法满足时增加1B,最多4B,英文占1B,欧洲语系占2B,东亚语系占3B,其他的特殊字符占4B
-
UTF-16:使用2、4字表示字符
-
UTF-32:使用4B表示字符
-
总结:UTF编码是为了UNICODE编码设计的一种存储和传输时节省空间的编码方案
-
-
python的2种字符串类型
-
str:在内存中使用unicode表示字符串
-
bytes:字节类型,网络传输或存储时磁盘时使用二进制数据表示,以b开头如:
-
b'\xs2\xb0'
-
使用encode()方法编码
-
作用:将字符串转为二进制(bytes)数据
-
格式:strname.encode(encoding='编码格式')
-
编码格式:可省略,默认UTF-8,也可以省略encoding=
-
str1='书山有路勤为径'
by1=str1.encode('GBK')
by2=str1.encode()
print('原串:',str1)
print('转为GBK:',by1)
print('转为UTF-8:',by2)
-
使用decode()解码
-
解码:将bytes类型二进制数据转换为字符串
-
格式:bytes.decode(endcoding='UTF-8')
-
str1='学海无涯苦作舟'
by1=str1.encode('GBK')
print('解码后:',by1.decode('GBK'))
1.9.正则表达式
1.9.1.正则表达式用于描述字符串的复杂文本规则的代码,一般用于查询匹配
1.9.2.常见元字符
-
作用表示特殊含义,一般为范围性、不好确切描述的字符串
-
单字符匹配的元字符
字符 | 功能 |
---|---|
. | 匹配任意1个字符 |
[ ] | 匹配[ ]中列举的字符 |
\d | 匹配0-9数字 |
\D | 匹配非数字 |
\s | 匹配空白(空格,tab) |
\w | 匹配0-9、a-z、A-Z、下划线、汉字 |
\W | 匹配非\w的字符 |
-
数量元字符
字符 | 功能 |
---|---|
* | 匹配前面的字符0次或多次、可有可无 |
? | 匹配前面的字符一次或0次,至少有1次,要么没有 |
+ | 匹配前面字符1次或多次 |
{m} | 匹配前面字符出现m次 |
{m,} | 匹配前面字符至少出现m |
{m,n} | 匹配前面字符至少出现m次,最多n次 |
-
边界字符
字符 | 功能 |
---|---|
^ | 行首 |
& | 行尾 |
\b | 匹配单词的开始或结束,分节符为空格 |
\B | 匹配非单词边界 |
-
其他字符
字符 | 功能 |
---|---|
[^] | 排除 |
\ | 转义 |
-
分组元字符
字符 | 功能 |
---|---|
| | 匹配左右两边任意一个表达式 |
(ab) | 将括号中的字符作为一个分组 |
4.9.3.示例
-
匹配8位qq号
^\d{8}$
-
匹配任意元音字母
[aeiou]
-
匹配身份证号:18位,前17位为数字时,最后一位为x或X进行校验
(^\d{17})(\d|X|x)$
-
匹配输入的163、126、qq、邮箱,前面至少5位最多11位
r'\w{5,11}@(163|126|qq).(com|cn)'
-
检索python文件名为:xxx.py
r'\w+\.py\b'
1.9.4.re模块
-
需要加载:import re
-
math()方法
-
格式:re.math(pattern,string,[fiags])
-
作用:从字符串起始位置开始查询匹配,成功返回math对象,否则返回None,只能匹配一个
-
pattern:使用正则表达式表示的模式字符串
-
string:要匹配的字符串
-
flags:可省略,表示标志位,控制匹配方法。如:是否区分大小写字母
-
标志 | 作用 |
---|---|
A | ASCLL |
I | 不区分大小写字母 |
M | 将^和¥应用于一行 |
S | 使用(.)匹配所有字符 |
X | 忽略空格、注释等 |
例1:匹配字符串是否以mr_开头,不分大小写
import re
p=r'mr_\w+' #模式字符串
str1='MR_SHOP mr_shop'
m=re.match(p,str1,re.I)
print(m)
#返回的对象内置多个功能方法
print('匹配值得起始位置:',m.start())
print('匹配值得结束位置:',m.end())
print('匹配位置的元组:',m.span())
print('匹配的数据:',m.group())
#只能在起始位置匹配
str2='123MR_SHOP me_shop'
n=re.match(p,str2,re.I)
print(n)
例2:验证输入的手机号是否为中国移动的号码
import re
m=input('请输入手机号:')
p=r'(13[4-9]\d{8})$ | (15[01289]\d{8})$'
mt=re.match(p,m)
if mt==None:
print('不是移动号段')
else:
print(m,'是有效的中国移动手机号')
-
search()方法匹配
-
作用:在字符串任意位置进行检索第一个匹配的值,成功返回search对象,不成功返回None
-
格式:re.search(pattern,string,[fiags])
-
例:上例修改
-
import re
p=r'mr_\w+' #模式字符串
str1='123MR_SHOP mr_shop'
m=re.search(p,str1,re.I)
print(m)
-
findall()方法
-
作用:在字符串中检索所有符合正则表达式规则的字符串,并以列表的形式返回,不成功返回列表
-
格式:re.findall(pattern,string,[fiags])
-