这里会介绍如何使用字符串格式化其他的值,并了解一下利用字符串的分割,连接,搜索等方法能做些什么。
1.基本字符串操作
所有标准的序列操作(索引,分片,乘法,判断成员资格,求长度,取最大值和最小值)对字符串同样适用。但是要千万记住:字符串是不可变的。因此下面的分片赋值是不合法的:
>>> website = "www.python.org"
>>> website[-3:] = "com"
TypeError:object doesn't support slice assignment
2.字符串格式化:精简版
字符串格式化使用字符串格式化操作符,即百分号%来实现。
在%的左侧放置一个字符串,在右侧则放置希望格式化的值。可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或者字典。一般情况下使用元组:
>>> format = "hello,%s. %s enough for ya?"
>>> values = ("world","Hot")
>>> print format %values
hello world,Hot enough for ya?
3.字符串格式化:完整版
格式化操作符的右操作数可以是任何东西,如果是元组的话,则其中的每一个元素都会被单独格式化,每个值都需要一个对应的转换说明符。
注意:如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以避免出错。
>>> '%s plus %s equals %s' %(1,1,2)
'1 plus 1 equals 2'
基本的转换说明符包括以下部分,注意:这些项的顺序是至关重要的。
(1)%字符:标记转换说明符的开始;
(2)转换标志(可选):-表示左对齐;+表示在转换值之前要加上正负号;“”(空白字符)表示整数之前保留空格;0表示转换值若位数不够则用0填充。
(3)最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。
(4)点(.)后跟精确度(可选):如果转换的是实数,精确度表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出。
(5)转换类型
3.1 简单转换
只需要写出转换类型,使用起来很简单:
>>> "price of eggs: $%d" % 42
'price of eggs:$42'
3.2 字段宽度和精度
字符宽度是转换后的值所保留的最小字符个数,精度对于数字转换来说,是结果中应该包含的小数位数,对字符串转换来说是转换后的值所能包含的最大字符个数。
可以使用*作为字段宽度或精度,此时数值会从元组参数中读出:
>>> '%5.*s' % (3,'hello')
' hel'
3.3 符号、对齐和0填充
在字段宽度和精度值之前还可放置一个“标表”,可以是零,加号,减号或空格。
>>> '010.2f' % pi
'0000003.14'
>>> print ('%+5d' % 10) + '\n' + ('%+5d' % -10)
+10
-10
>>> '%-10.2f' % pi
'2.14 '
>>> print('% 5d' % 10) + '\n' + ('% 5d' % -10)
10
-10
4.字符串方法
4.1 find
find方法可以在一个较长的字符串中查找子字符串。它返回子串所在位置的最左端索引,如果没有找到则返回-1.
>>> "with a moo-moo here".find('moo')
7
>>> title = "python 's flying"
>>> title.find(flying)
11
这个方法还可以接受可选的起始点和结束点参数。注意:由起始值和终止值指定的范围包含第一个指引,但不包含第二个索引。
>>>subject = "get rich now"
>>>subject.find('get',1)
-1
>>>subject.find('rich',2,8)
4
4.2 jion
jion方法是非常重要的字符串方法,它是split方法的逆方法,用来在队列中连接元素。
>>> seq = ['','','']
>>> j = '+'
>>> j.jion(seq)
'1+2+3'
注意:需要连接的队列元素必须都是字符串。
4.3 lower
lower方法返回字符串的小写字母版。
>>> "THIS IS A CAT".lower()
'this is a cat'
4.4 replace
replace方法返回某字符串的所有匹配项均被替换后得到的字符串。(类似于“查找并替换”)
>>> 'this is a test'.replace('is','eez')
'theez eez a test'
4.5 split
这是一个非常重要的字符串方法,是jion的逆方法,用来将字符串分割成序列
>>> '1+2+3'.split('+')
['','','']
注意:如果不提供任何分隔符,程序会把所有空格作为分隔符(空格,制表,换行等)
4.6 strip
strip方法返回去除两侧(不包括内部)空格的字符串:
>>> " this is a cake ".strip()
'this is a cake'
也可以指定需要去除的字符,将它们列为参数即可:
>>> "*** spam * for everyone!!!".strip('* !')
'spam * for everyone'
4.7 translate
translate方法和replace方法一样,可以替换字符串中的某些部分,但是和前者不同的是,translate方法只处理单个字符。它的优势在于可以同时进行多个替换,有时候比replace效率高得多。
在使用translate转换之前,需要先完成一张转换表。转换表中是以某字符替换某字符的对应关系。因为这个表有多达256个项目,我们还是不要自己写了,使用string模块里面的maketrans函数就行。
maketrans函数接收两个参数:两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。
>>> from string import maketrans
>>> table = maketrans('cs','kz')
>>> 'this is an incredible test'.translate(table)
'thiz iz an inkredible tezt'
translate的第二个参数是可选的,这个参数是用来指定需要删除的字符的。如想要删除所有空格:
>>> 'this is an incredible test'.translate(table,' ')
'thizizaninkredibletezt'