字符串格式化
在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望被格式化的值。
>>> format = "Hello , %s . %s enough for ya ?"
>>> value = ('world', 'Hot')
>>> print format % value
Hello , world . Hot enough for ya ?
按精度格式化浮点型数据
>>> format = 'Pi with three decimals : %.3f'
>>> import math
>>> print format % math.pi
Pi with three decimals : 3.142
模板字符串
substitute这个模板方法会用传递进来的关键字参数foo替换字符串中的$foo。
>>> from string import Template
>>> s = Template('$x , glorious $x !')
>>> s.substitute(x = 'slurm')
'slurm , glorious slurm !'
如果替换字段是单词的一部分,那么参数名就必须用括号括起来,从而精确指明结尾:
>>> s = Template("It's ${x}tastic !")
>>> s.substitute(x = 'slurm')
"It's slurmtastic !"
除了关键字参数之外,还可以使用字典变量提供值/名称对
>>> s = Template("A $thing must never $action .")
>>> d = {}
>>> d['thing'] = 'gentleman'
>>> d['action'] = 'show his socks'
>>> print s.substitute(d)
A gentleman must never show his socks .
格式化操作符的右操作数如果是元组的话,则其中的没有个元素都会被单独格式化,每个值都需要一个对应的转换说明符。如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以免出错。
>>> '%s puls %s equals %s' %(1,2,3)
'1 puls 2 equals 3'
>>> '%s puls %s equals %s' %1,2,3
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: not enough arguments for format string
转换符说明:
%字符 标记转换说明符的开始
转换标志(可选) -表示左对齐;+表示在转换值之前要加上正负号;“”(空白字符)表示整数之前保留空格;0 表示转换值若位数不够则用0填充
最小字段宽度(可选) 转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从元组中读出
点(.)后跟精度值(可选) 如果转换的是实数,精度值就表示出现在小数点后面的位数。如果转换的是字符串,那么该数 字就表示最大字段宽度。如果是*,那么精度会从元组中读出
转换类型
d,i 带符号的十进制整数
0 不带符号的八进制
u 不带符号的十进制
x 不带符号的十六进制(小写)
X 不带符号的十六进制(大写)
e 科学计数法表示的浮点数(小写)
E 科学计数法表示的浮点数(大写)
f,F 十进制浮点数
g 如果指数大于-4或者小于精度值则和e相同,其他情况与f相同
G 如果指数大于-4或者小于精度值则和E相同,其他情况与F相同
C 单字符(接受整数或者单字符字符串)
r 字符串(使用repr转换任意的Python对象)
s 字符串(使用str转换任意的Python对象)
简单转换
>>> 'Price of eggs : $%d' %42
'Price of eggs : $42'
>>> 'Price of eggs : $%s' %42
'Price of eggs : $42'
>>> 'Price of eggs : $%x' %42
'Price of eggs : $2a'
字段宽度和精度
这两个参数都是整数(首先是字段宽度,然后是精度),通过点号(.)分割,虽然两个都是可选的参数,但如果只给出精度,就
必须包含点号。
>>> import math
>>> '%10f' % math.pi #字段宽10
' 3.141593'
>>> '%10.2f' % math.pi #字段宽10,精度2
' 3.14'
>>> '%.2f' % math.pi #精度2
'3.14'
>>> '%.5s' %'fjajfae'
'fjajf'
可以使用*(星号)作为字段宽度或者精度(或者两者都使用*),此时数值会从元组参数中读出:
>>> '%.*s ' %(1, "jlajfa")
'j '
符号、对齐和用0填充
>>> '%010.5f' %math.pi #用0填充
'0003.14159'
>>> '%-10.5f' %math.pi #左对齐
'3.14159 '
>>> print ('%+5d' %10) + "\n" + ('%+5d' %-10) #使用+,不管是整数还是负数都表示出符号
+10
-10
字符串方法
find
find方法可以在一个较长的字符串中查找子串。它返回子串所在位置的最左端索引。如果没有找到则返回-1。find方法并不返回布尔值,返回的是索引值。如果返回的是0,则表示已经找到了子串。
>>> str = 'fjajaojajljoj'
>>> str.find('ao')
4
>>> str.find('b')
-1
find方法还可以接收可选的起始点和结束点参数
>>> sub = '$$$ get rich now !!! $$$'
>>> sub.find('$$$')
0
>>> sub.find('$$$', 1) #只提供起始点
21
>>> sub.find('$$$', 1,20) #提供起始点和结束点
-1
注意:由起始和终止值指定的范围(第二个、第三个参数)仍然是左闭右开
join
是slipt方法的逆方法,用来连接序列中的元素。
>>> seq = [1,2,3,4,5]
>>> sep = '+'
>>> sep.join(seq)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
>>> seq = [1,2,3,4,5]
>>> sep = 6
>>> sep.join(seq)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
AttributeError: 'int' object has no attribute 'join'
>>> seq = ['1','2','3','4','5']
>>> sep = '+'
>>> sep.join(seq)
'1+2+3+4+5'
注意:需要被连接的序列元素都必须是字符串。
lower
lower方法返回字符串的小写字母版。
>>> if 'Gumby' in ['gumby', 'simth' , 'jones'] : print 'Found it !'
...
>>> name = 'Gumby'
>>> if name.lower() in ['gumby', 'simth' , 'jones'] : print 'Found it !'
...
Found it !
>>> name = 'gumby'
>>> if name.lower() in ['Gumby', 'simth' , 'jones'] : print 'Found it !'
...
title
title方法会将字符串转换为标题,也就是所有单词的首字母大写,而其他字母小写。
>>> "that's all folks".title()
"That'S All Folks"
replace
replace方法返回某字符串的所有匹配项均被替换之后得到字符串
>>> 'This is a test'.replace('is', 'eez')
'Theez eez a test'
split
它是join的逆方法,用来将字符串分割成序列
>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']
>>> '/usr/bin/env/python'.split('/')
['', 'usr', 'bin', 'env', 'python']
>>> '/usr/bin/env/python'.split()
['/usr/bin/env/python']
注:如果不提供任何分割符,程序会把所有空格作为分隔符(空格、指标、换行等)
strip
strip方法返回去除两侧(不包括中间)空格的字符串
>>> ' ni hao ma ? '.strip()
'ni hao ma ?'
也可以指定需要去除的字符,将它们列为参数即可,但是只会去除两侧的字符,不会去除中间的字符。
>>> ' ***** ni * hao * ya ! ****!!! '.strip(' *!')
'ni * hao * ya'
translate
translate方法和replace方法一样,可以替换字符串中的某些部分,但是和前者不同的是,translate方法只处理单个字符。它的优势在于可以同时进行多个替换,有些时候比replace效率高的多。
maketrans
maketrans函数接受两个参数:两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。
>>> from string import maketrans
>>> table = maketrans('cs', 'kz')
>>> len(table)
256
>>> table[97:123]
'abkdefghijklmnopqrztuvwxyz'
>>> 'this is an incredible test'.translate(table)
'thiz iz an inkredible tezt'
>>> 'this is an incredible test'.translate(table, ' ')
'thizizaninkredibletezt'
translate的第二个参数是可选的,这个参数是用来指定需要删除的字符。如上例所示。