python之字符串处理 2014-4-5

时间:2023-03-08 22:18:13
python之字符串处理 2014-4-5

#字符串 p62 13:20pm-15:20
上一章讲的所有的序列化操作对于字符串同样适用
不过字符串不可变 所以无法使用分片赋值
1.字符串格式化
>>> format="hello,%s,%s ok"
>>> values=('ww','xx')
>>> print format % values
hello,ww,xx ok
%s代替values里面的值 貌似%s不能改为$x
s表示字符串

格式化浮点数
%.3f .3表示精度 f表示类型 float
>>> format="Pi with three decimals:%.3f"
>>> from math import pi
>>> print format %pi
Pi with three decimals:3.142

字符串格式化 完整版
如果右操作数是元组的话 则其中每一个元素都会被单独格式化 每个值都需要一个对应的转换说明符
(1)%字符标记转换说明符的开始
(2)转换标志(可选)-左对齐 表示在转换值之前加上正负号;""(空白字符)表示正数之前要保留空格;0表示转换值如果位数不够用0填充
(3)最小字段宽度 转换后的字符串至少应该有该值指定的宽度
(4)点(.)后跟精度值
(5)转换类型
d,i 带符号的十进制整数
0 不带符号的八进制
u不带符号的十进制
x 不带符号的16进制(小写)
X 不带符号的16进制(大写)
e 科学计数法表示的浮点数(小写)
C单字符(接受整数或者单字符字符串)
r 字符串(使用repr转换任意python对象)
s 字符串(使用str转换任意python对象)

简单转换
只要写出转换类型 使用起来非常简单
>>> 'price of eggs :$%d'%42
'price of eggs :$42'
字段宽度和精度
>>> '%20f'%pi #字段宽20
' 3.141593'
>>> '%20.2f'%pi #字段宽20 精度为2
' 3.14'
可以用*作为字段宽度或者精度
>>> '%.*s'%(5,'Guido van')
'Guido'

符号 对齐和0填充
>>> '%010.2f'%pi
'0000003.14'
#0填充
>>> '%-10.2f'%pi
'3.14 '
#左对齐 多余空格在右 默认是空格在左
>>> print('%10d'%10)
10
>>> print('%10d'%-10)
-10
空白'%10d'可以用来对齐

>>> print('%+5d'%10)
+10
>>> print('%+5d'%-10)
-10
数字都加上正负号

4.字符串方法
find 查找子字符串最左端的索引 若无 返回-1
>>> t='hello I love your love'
>>> t.find('love')
8

#find还可以指定起点和终点范围
>>> t='love I love your love love'
>>> t.find('love')
0
>>> t.find('love',1)
7
>>> t.find('love',2)
7
>>> t.find('love',8)
17
>>> t.find('love',8,30)
17

join在队列中添加元素 split的逆方法
>>> seq=['1','2','3']
>>> sep="+"
>>> sep.join(seq)
'1+2+3'
注意符号的位置 在前 而且元素必须是字符串

>>> dir='','usr','bin'
>>> '/'.join(dir)
'/usr/bin'

lower返回字符串的小写字母版
>>> 'Heello woEld'.lower()
'heello woeld'
查找姓名 或者验证码的时候 比较有用不管输入大小写都可以

>>> 'heLLO oLi'.title()
'Hello Oli'
#首字母大写

replace返回某字符串的所有匹配项均被替换之后得到字符串
>>> 'this is a test'.replace('is','eez')
'theez eez a test'

split 与join相反 用来将字符串分隔成序列
>>> '1+2+3'.split('+')
['1', '2', '3']
如果不提供任何分隔符 程序会把所有空格作为分隔符

strip返回去除两侧空格的字符串
>>> ' hello world '.strip()
'hello world'
也可指定某个字符去除
'hello'.strip(ll)

translate 类似于replace 替换 但是 translate只处理单个字符 优势在于同时进行多个替换 有时候比replace效率高得多
使用之前 需要先建一张转换表 使用string模块的maketrans函数
from string import maketrans
table=maketrans('cs','kz')#接受2个参数
转换表是包含替换的ASCII字符集中256个字符的替换字母的字符串
>>> from string import maketrans
>>> table=maketrans('cs','kz')
>>> len(table)
256
>>> table[97:123]
'abkdefghijklmnopqrztuvwxyz'
>>> maketrans('','')[97:123]
'abcdefghijklmnopqrstuvwxyz'
以上建好转换表 以下转换
>>> 'this is an test'.translate(table)
'thiz iz an tezt'
第二个参数可以删除指定的字符 比如空格
>>> 'this is an test'.translate(table," ")
'thizizantezt'