字符串
字符串都是不可变的。如:分片赋值都是不合法的。
所有标准的序列操作(索引、分片、乘法、判断成员资格、求长度、取最小值和最大值)对字符串同样适用,前面已经讲述的这些操作。但是,请注意字符串都是不可变的。

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
================================================
在%左侧放置一个字符串,而右侧则放置希望被格式化的值。

>>> format = "Hello,%s,%s enough for ya?" 
 >>> values = ('world','Hot') 
 >>> print format % values 
 Hello,world,Hot enough for ya?


格式化字符串的%部分称为转换说明符,他们标记了需要插入转换值的位置。
s表示值会被格式化为字符串---如果不是字符串,则会用str将其转换为字符串。


如果要格式化实数(浮点数),可以使用f说明转换为说明符类型,同时提供所需
的精度,一个句点再加上希望保留的小数位数。

>>> format = "Pi with three decimals: %.3f"      
 >>> from math import pi 
 >>> print format % pi 
 Pi with three decimals: 3.142 
 [root@node01 python]# vi zfc.py 
 #!/usr/bin/python 
 print "My name is %s and weight is %d kg!" % ('Zara', 21) 
 [root@node01 python]# python zfc.py  
 My name is Zara and weight is 21 kg! 
 =================================================


python字符串格式化符号:
     符号   描述
      %c    格式化字符及其ASCII码
      %s    格式化字符串
      %d i%   格式化整数
      %u    格式化无符号整型
      %o    格式化无符号八进制数
      %x    格式化无符号十六进制数
      %X    格式化无符号十六进制数(大写)
      %f    格式化浮点数字,可指定小数点后的精度
      %e    用科学计数法格式化浮点数
      %E    作用同%e,用科学计数法格式化浮点数
      %g    %f和%e的简写
      %G    %f 和 %E 的简写
      %p    用十六进制数格式化变量的地址
==================================================
格式化操作符辅助指令:
      符号    功能
      *       定义宽度或者小数点精度
      -       用做左对齐
      +       在正数前面显示加号( + )
      <sp>    在正数前面显示空格
      #       在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
      0       显示的数字前面填充'0'而不是默认的空格
      %       '%%'输出一个单一的'%'
      (var)   映射变量(字典参数)
      m.n.    m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
==================================================
简单转换

>>> 'price of eggs: $%d' % 42        格式化整数 
 'price of eggs: $42' 
 >>> 'Hexadecimal price of eggs: %x' % 42    格式化无符号十六进制数 
 'Hexadecimal price of eggs: 2a' 
 >>> from math import pi 
 >>> 'Pi: %f...' % pi                    格式化浮点数字,可指定小数点后的精度 
 'Pi: 3.141593...' 
 >>> 'Very inexact estimate of pi: %i' % pi  格式化整数 
 'Very inexact estimate of pi: 3' 
 >>> 'Using str: %s' % 42L                    格式化字符串 
 'Using str: 42' 
 >>> 'Using repr: %s' % 42L               格式化字符串 
 'Using repr: 42'



字符串宽度和精度
转换字符串可以包括字段宽度和精度。

>>> '%10f' % pi         字段宽10 
 '  3.141593' 
 >>> '%10.2f' % pi       字段宽10,精度2 
 '      3.14' 
 >>> '%.2f' % pi         精度2    
 '3.14'  
 >>> '%.5s' % 'Guido van Rossum' 
 'Guido' 
 >>> '%.*s' % (5,'Guido van Rossum')  用*作为字段宽度和精度,此时数值会从元组参数中读出: 
 'Guido'



符号、对齐和用0填充
在字段宽度和精度值之前还可以放置一个“标志”,该标志可以是零、加号、减号或者空格。
零表示数字将会用0进行填充。

>>> '%010.2f' % pi 
 '0000003.14' 
 >>> 010 
 8 
 >>> '%-10.2f' % pi    用减号来左对齐数值 
 '3.14      '          数字左侧多出了额外的空格 
 >>> print ('% 5d' % 10) + '\n' + ('% 5d' % -10)     空格(“”)意味着在正数前加上空格。这在需要对齐正负数时会很有用。 
    10 
   -10 
 >>> print ('% +5d' % 10) + '\n' + ('% +5d' % -10)   +,他表示不管是正数还是负数都标识出符号。 
   +10 
   -10


===============================================
字符串基本操作
字符串从string 模块中“继承”了很多方法,这里只介绍一些特别有用的
1、find 
find 方法可以在一个较长的字符串中查找子字符串。它返回子串所在位置的最左端索引。如果没有找到则返回-1.

>>> 'with a moo-moo here. and a moo-moo ther'.find('moo')  
 7 
 >>> title = "Monty Pyhon's Flying Circus" 
 >>> title.find('Monty') 
 0 
 >>> title.find('Python') 
 -1


字符串的find方法并不返回布尔值,如果返回的是0,则证明在索引0位置找到了子串。

>>> subject = '$$$ Get rich now!!! $$$' 
 >>> subject.find('$$$')                起始点 
 0 
 >>> subject.find('$$$', 1)             只提供起始点 
 20 
 >>> subject.find('!!!')                       
 16 
 >>> subject.find('!!!',0,16)           提供起始点和结束点 
 -1



2、join
join 方法是非常重要的字符串方法,它是split方法的逆方法,用来在队列中添加元素。

>>> seq = [1,2,3,4,5]          这里说明连接的序列元素都必须是字符串 
 >>> sep = '+' 
 >>> sep.join(seq) 
 Traceback (most recent call last): 
   File "<stdin>", line 1, in <module> 
 TypeError: sequence item 0: expected string, int found 
 >>> seq = ['1','2','3','4','5'] 
 >>> sep = '+' 
 >>> sep.join(seq) 
 '1+2+3+4+5' 
 >>> dirs = '','usr','bin','env' 
 >>> '/'.join(dirs) 
 '/usr/bin/env' 
 >>> print 'C:' + '\\'.join(dirs) 
 C:\usr\bin\env 
 >>>



3、lower
lower 方法返回字符串的小写字母版。
如果想要编写“不区分大小写”的代码的话,那么这个方法就派上用场了-----代码会忽略大小写状态。

>>> 'Trondheim Hammer Dance'.lower() 
 'trondheim hammer dance' 
 >>> if 'Gumby' in ['gumby','smith','jones']: print 'Found it!' 
 ...  
 >>> name = 'Gumby' 
 >>> names = ['gumby', 'smith', 'jones']  
 >>> if name.lower() in names:print 'Found it!' 
 ...  
 Found it! 
 title 
 将字母大写 
 >>> "that's all folks".title() 
 "That'S All Folks" 
 string模块的capwords 
 >>> import string 
 >>> string.capwords("that's all folks") 
 "That's All Folks"



4、replace 
replace 方法返回某字符串的所有匹配项均被替换之后得到字符串。

>>> 'This is a test'.replace('is','eez')  
 'Theez eez a test'



5、split
这是一个非常重要的方法,它是join的逆方法,用来将字符串分割成序列。

>>> '1+2+3+4+5'.split('+') 
 ['1', '2', '3', '4', '5'] 
 >>> '/usr/bin/env'.split('/') 
 ['', 'usr', 'bin', 'env'] 
 >>> 'using the default'.split()  
 ['using', 'the', 'default']


如果不提供分隔符,程序会把所有空格作为分隔符。

6、strip 
strip 方法返回去除两侧(不包含内部)空格的字符串。

>>> '      internal white space is kept    '.strip()  
 'internal white space is kept' 
 >>> names = ['gumby', 'smith', 'jones'] 
 >>> name = 'gumby' 
 >>> if name in names: print 'Found it!' 
 ...  
 Found it! 
 >>> if name.strip() in names: print 'Found it!' 
 ...  
 Found it!


也可以指定需要去除的字符。

>>> '*** SPAM * for * everyone !!! ***' .strip('*!') 
 ' SPAM * for * everyone !!! '


这个方法只能去除两侧的字符,所有字符串中的型号没有被去掉。

7、translate
translate方法和replace方法一样,可以替换字符串中的一些部分。translate方法只处理单个字符。
他的优势在于可以进行多个替换,有些时候比replace效率高的多。

>>> from string import maketrans 
 >>> table = maketrans('cs', 'kz') 
 >>> len(table)  
 256 
 >>> table[97:123] 
 'abkdefghijklmnopqrztuvwxyz' 
 >>> maketrans('','')[97:123] 
 'abcdefghijklmnopqrstuvwxyz' 
 >>> 'this is an incredible test'.translate(table) 
 'thiz iz an inkredible tezt'