使用字符串
- 基本字符串操作:
所有标准的序列操作(索引、分片、加、乘、成员资格、长度、最小值、最大值)对字符串同样适用。字符串都是不可改变的!
- 字符串格式化:精简版
字符串格式化使用字符串格式化操作符(%)实现。若是格式化字符串里面有'%',必须使用'%%'。
%的左侧为格式化字符串;%的右侧为被格式化的值(可为一个值,也可为多个值的元组或字典)。注:如果使用列表或其他序列代替元组,那么序列会被解释为一个值,只有元组和字典可以格式化为一个以上的值。>>> format = "Hello, %s. %s enough for ya." >>> values = ('world', 'Hot') >>> print format % values Hello, world. Hot enough for ya.string模块提供另外一种格式化值的方法:模板字符串。它的工作方式类似于很多UNIX Shell里的变量替换。如下所示,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!' #除了关键字参数之外,还可以使用字典变量提供值/名称对(参见第4章)。 >>> 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. #方法safe_substitute不会因缺少值或者不正确使用$字符而出错。 - 字符串格式化:完整版
- 简单转换
- 字段宽度和精度
- 符号、对齐和用0填充
- 字符串方法:
- find():可以在一个较长的字符串中查找子串。它返回子串所在位置的最左端索引。如果没有找到则返回-1。
>>> 'With a moo-moo here, and a moo-moo there'.find('moo') 7 >>> title ="Monty Python's Flying Circus" >>> title.find('Monty') 0 >>> title.find('Python') 6 >>> title.find('Flying') 15 >>> title.find('Zirquss') -1在前一节的成员资格中,在subject中使用了'$$$'表达式建立了一个垃圾邮件过滤器。也可以使用find方法(Python 2.3以前的版本中也可用,但是in操作符只能用来查找字符串中的单个字符):>>> subject =’$$$ Get rich now!!! $$$' >>> subject.find('$$$') 0注:字符串的find方法并不返回布尔值。如果返回的是0,则证明在索引0位置找到了子串。
这个方法还可以接收可选的起始点和结束点参数:>>> subject ='$$$ Get rich now!!! $$$' >>> subject.find('$$$') 0 >>> subject.find('$$$',1) # 只提供起始点 20 >>> subject.find('!!!') 16 >>> subject.find('!!!',0,16) # 提供起始点和结束点 -1 ## 由起始和终止值指定的范围(第二个和第三个参数)包含第一个索引,但不包含第二个索引。 - join():用来链接序列中的元素。
>>>seq = [1, 2,3, 4.5] >>>sep =’+’ >>>sep.join(seq)# 连接数字列表 TypeError:sequence item 0:expected string, int found # 需要被连接的序列元素都必须是字符串。 >>>seq = ['1'.'2','3','4'.'5'] >>> 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
- lower():返回字符串的小写字母版。
>>>name ='Gumby' >>>names =['gumby', 'smith'.'jones'] >>>if name.lower() in names: print 'Found it!' Found it!
标题转换:title()、capwords()。>>> "that's all folks".title() "That'S All. Folks" >>> import string >>> string.capwords("that's all, folks") "That's Al1, Folks" - replace():返回某字符串的所有匹配项均被替换之后得到字符串。
>>>'This is a test'.replace('is', 'eez') 'Theez eez a test' - split():将字符串分割成序列,如果不提供任何分隔符,程序会把所有空格作为分隔符(空格、制表、换行等)。
>>>'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'] - strip():返回去除两侧(不包括内部)空格的字符串。
>> internal whitespace is kept '.strip() 'internal whitespace is kept'
它和lower方法一起使用的话就可以很方便的对比输入的和存储的值。让我们回到lower部分中的用户名的例子,假设用户在输入名字时无意中在名字后面加上了空格:>>> names =['gumby', 'smith'.'jones'] >>> name = 'gumby ' >>> if name in names: print 'Found it!' ··· >>> if name.strip() in names: print 'Found it!' Found it!
也可以指定需要去除的字符,将它们列为参数即可。 这个方法只会去除两侧的指定字符,所以字符串中的星号没有被去掉。>>> '*** SPAM * for *everyone!!! ***' .strip(' *!') 'SPAM * for * everyone' - translate():与replace类似,但后者处理一个字符串替换,前者处理多个的字符替换,需建立一张转换表。
转换表是以某字符替换某字符的对应关系。因为这个表(事实上是字符串)有多达256个项目,所以使用string模块里面的maketrans函数建立。maketrans函数接受两个参数:两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。
>>>from string import maketrans >>>table = maketrans('cs','kz') >>>table[97:123] 'abkdefghijklmnopqrztuvwxyz' >>>table = maketrans('','') >>>table[97:123] 'abcdefghijklmnopqrstuvwxyz' >>>len(table) 256创建转换表后,将它用作translate方法的参数,进行字符串的转换。>>>'this is an incredible test'.translate(table) 'thiz iz an 1nkredible tezt' >>>'this is an incredible test'.translate(table,' ')# 第二参数指定需要删除的字符 'thiz1zaninkredibletezt'
- find():可以在一个较长的字符串中查找子串。它返回子串所在位置的最左端索引。如果没有找到则返回-1。

浙公网安备 33010602011771号