记住,字符串是不可变的。和Java一样哈哈。
使用字符串格式化操作符(%)来实现:
>>> format = "Hello %s,nice to meet you!"
>>> print format % 'Jack'
Hello Jack,nice to meet you!
>>> format = "Hello %s,nice to meet %s!"
>>> print format % ('Rose','me')
Hello Rose,nice to meet me!
格式化多个值可以使用元组或字典。%后面的s表示格式化为字符串,还有其他的如下:
[外链图片转存失败(img-WVixAKPP-1562849770959)(index_files/c0691a19-c112-482a-bf83-093cb0d60a5e.jpg)]
模板字符串
string提供了另一种格式化值的方法:
>>> from string import Template
>>> s = Template("$x,glorious $x!")
>>> s.substitute(x='jack') # 替换
'jack,glorious jack!'
还可以使用字典变量提供值/名称对:
>>> 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.'
格式化操作符的右操作数可以是任意类型,如果是元组或字典,那么字符串格式化将会有所不同。
若右操作数是元组,则其中每个元素都会被单独格式化,每个值都需要一个对应的转换说明符。
>>> '%s + %s = %s' % (1,1,2)
'1 + 1 = 2'
>>> '%s + %s = %s' % 1,1,2 # 缺少括号
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: not enough arguments for format string
基本的转换说明符
类似于java中的indexOf。在字符串中查找子串。返回子串第一次出现在字符串中的索引,没找到返回-1。
>>> s = "hello,it's me me"
>>> s.find('me')
11
还记得没,in没找到的话就会抛异常
find还可以接收可选的起始点和结束点:
>>> s = "hello,it's me me"
>>> s.find('me')
11
>>> s.find('me',12) #提供了起点
14
用于将字符串分割成序列
>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']
>>> "nice to meet you".split() #不提供参数则以所有空格(包括制表和换行)作为分隔符
['nice', 'to', 'meet', 'you']
join方法是split的逆方法,用来连接序列中的元素:
>>> seq = [1,2,3,4,5]
>>> sep = '+'
>>> sep.join(seq)
Traceback (most recent call last):
File "", line 1, in
TypeError: sequence item 0: expected string, int found
>>> seq = list('12345')
>>> seq
['1', '2', '3', '4', '5']
>>> sep.join(seq)
'1+2+3+4+5'
注意是参数是序列,且需要连接的序列元素都必须是字符串。
>>> 'Trondheim Hammer Dance'.lower()
'trondheim hammer dance'
用来替换字符串,返回某字符串的所有匹配项被替换之后的字符串:
>>> 'This is a test'.replace('is','eez')
'Theez eez a test'
是join
的逆方法,用来分割字符串,得到一个列表:
>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']
类似java中的trim方法。用来去掉字符串的两侧空格
>>> ' yeah I love her '.strip()
'yeah I love her'
也可以指定需要去除的字符,但是也只是去除两侧的字符:
>>> "*** Mother fu*k ,fu*k you!***".strip('*!')
' Mother fu*k ,fu*k you' #参数里面没有指定空格,因此左边还有一个空格
这个方法类似replace方法,但是translate方法只处理单个字符,优势在于可以同时进行多个替换,有时候效率比replace高的多。