一、基本字符串操作

所有标准的序列操作(分片、索引、乘法、成员资格、求长度、最大值、最小值)对于字符串同样适用,但是字符串是不可变的,也就是说不能对字符串进行修改。

二、字符串格式化

1、基本语法

1.1 字符串使用字符串格式化操作符 “%” 来实现格式化,在%的左侧放置一个字符串,右侧放置希望被格式化的值。

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

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

注意:只有元组和字典可以格式化一个以上的值,使用其他序列会被解释为一个值。
1.2  如果要格式化实数(浮点数),可以使用f说明转换说明符的类型,同时提供所需要的精度:一个句点加上希望保留的小数位数。

>>> format="Pi with three decimals:%.3f"
>>> from math import pi
>>> print format % pi
Pi with three decimals:3.142

精度应该放在类型字符前面。

1.3 模板字符串

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("Make $$ selling $x")
>>> s.substitute(x='slurm')
'Make $ selling slurm'

也可以使用字典变量提供值/名称对:

>>> s=Template('A $thing must never $action.')
>>> d={}
>>> d['thing']='gentleman'
>>> d['action']='show his socks'
>>> s.substitute(d)
'A gentleman must never show his socks.'


2、完整的进行字符串格式化

2.1 基本的转换说明符包括以下几个部分。注意,这些项的顺序是固定的。

(1)%字符:标记转换说明符的开始。

(2)转换标志(可选):- 表示左对齐;+表示在转换值之前要加上正负号;""(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充。

(3)最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。

(4)点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度会从元组中读出。

(5)转换类型:见下表。

python字符串中的元素 python字符串的值_字符串

2.2 简单转换

>>> 'Price of egg:$%d'%42
'Price of egg:$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:%r'%42L
'Using repr:42L'

2.3 字段宽度和精度

字段宽度是指转换后的值所保留的最小字符个数。

精度指的是结果中应该包含的小数位数,或者(对于字符串)是转换后的值所能包含的最大字符个数。
格式为(字段宽度.精度),如果只给出精度,就必须包含点号;如果只给出字段宽度,则不需要加点号:

>>> '%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'

2.4 符号、对齐和用0填充

用0填充:

>>> '%010.2f'%pi
'0000003.14'

(-)左对齐:

>>> '%-10.2f'%pi
'3.14      '

("")也就是空白,相当于空格,表示正数前加空格:

>>> print('% 5d'%10)+'\n'+('% 5d'% -10)
   10
  -10

以上操作符都应放在字段宽度和精度的前面,顺序严格按照2.1所示的顺序执行。


三、字符串方法

1、find方法用于在一个较长的字符串中查找子串,返回子串所在位置的最左端索引,如果没有则返回-1。

>>> 'With a moo-moo here,and amoo-moo there'.find('moo')
7
>>> title="Monty Pyhon's Flying Circus"
>>> title.find('Monty')
0
>>> title.find('Pyhon')
6
>>> title.find('Flying')
14
>>> title.find('Zirquss')
-1

该方法还可以接收可选的起始点和结束点参数:

>>> subject='$$$ Get rich now!!! $$$'
>>> subject.find('$$$')
0
>>> subject.find('$$$',1)
20
>>> subject.find('!!!')
16
>>> subject.find('!!!',0,16)
-1

2、join方法用来连接序列中的元素:

>>> seq=[1,2,3,4,5]
>>> sep='+'
>>> sep.join(seq)

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    sep.join(seq)
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方法返回字符串的小写字母版:

>>> 'Trondheim Hammer Dance'.lower()
'trondheim hammer dance'

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']
>>> 'Using the default'.split()
['Using', 'the', 'default']

注意:如果不提供任何分隔符,程序会把所有空格作为分隔符(空格、制表、换行等)。


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

>>> '     internal whitespace is kept     '.strip()
'internal whitespace is kept'

也可以指定去除的字符:

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

上述两段代码的结果一样,目前不清楚!的具体意思

7、translate方法和replace方法一样,唯一的区别在于translate方法只处理单个字符,它的优势在于可以同时进行多个替换,有时候比replace效率高。