目录
3.4.4 replace
3.4.5 split
3.4.6 strip
3.4.7 translate
转换表中都有什么
非英语字符串的问题
3.5 小结
3.5.1 本章的新函数
3.5.2 接下来学什么
3.4.4 replace
replace方法返回某字符串的所有匹配项均被替换之后得到的字符串。
>>> "This is a test".replace("is",'eez') 'Theez eez a test'
类似于查找并替换
请参见:translate
附录B:expandtabs
3.4.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']
Ps:如果不提供任何分隔符,程序会把所有空格作为分隔符(空格、制表、换行符等
请参加:join
附录B:rsplit、splitlines
3.4.6 stripstrip方法返回去除两侧(不包含内部)空格的字符串:
>>> " internal whitespace is kept ".strip() 'internal whitespace is kept'
他和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'
这个方法只会去除两侧的字符,所以字符串中的星号没有被去掉。
附录B :lstrip、rstrip
3.4.7 translatetranslate方法和replace方法一样,可以替换字符串中的某些部分,但是不同的是translate只处理单个字符。他的优势在于可以同时进行多个替换,有时候比replace效率高的多。
使用这个方法的方式有很多(比如替换换行符或者其他因平台而异的特殊字符)。但是让我们考虑一个简单的例子:假设需要将纯正的英文文本转换为带有德国口音的版本。为此需要把字符c替换为k把s替换为z。
在使用translate转换之前,需要先完成一张转换表。转换表是以某字符替换某字符的对应关系。因为这个表(事实上是字符串)有多达256个项目,我们还是不要自己写了,使用string模块里面的maketrans函数就行。
maketrans函数接受两个参数:两个等长的字符串,表示第一个字符串中每个字符都用第二个字符串中相同位置的字符替换。
>>> from string import maketrans >>> table = maketrans('cs','kz') #转换表
转换表中都有什么
转换表是包含替换ASCII字符集中256个字符的替换字母的字符串。
>>> table = maketrans('cs','kz') >>> len(table) 256 >>> table[97:123] 'abkdefghijklmnopqrztuvwxyz' >>> maketrans('','')[97:23] '' >>> maketrans('','')[97:123] 'abcdefghijklmnopqrstuvwxyz'
把小写字母部分的表提取出来。Table和空转换(没有改变任何东西)中的字母表。空转换包含一个普通的字母表,而在他前面的代码中,字母c和s被替换为k和z
创建这个表后,我们可以将它用作translate方法的参数,进行转换:
>>> 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'
请参见:replace,lower
非英语字符串的问题
有些时候类似于lower这样的字符串方法并不能如我们所愿地进行工作,比如要使用一个非英语字母的字母表。假设我们想将大写挪威字母BØLLEFRØ转换为小写字母:
>>> print 'BØLLEFRØ'.lower() bØllefrØ
没有成功,因为python没有把Ø当做真正的字母。本例子中可以使用translate转换
>>> table = maketrans('ÆØÅ', 'æøå') >>> word = 'KÅPESØM' >>> print word.lower() kÅpesØm >>> print word.translate(table) KåPESøM >>> print word.translate(table).lower() kåpesøm
那么接下来使用Unicode可能也会解决问题:
>>> print 'ærnæringslære'.upper() æRNæRINGSLæRE >>> print u'ærnæringslære'.upper() ÆRNÆRINGSLÆRE
3.5 小结
本章介绍了字符串的两种非常重要的使用方式。
字符串格式化:求模 *** 作符(%)可以用来将其他值转换为包含转换标志的字符串,例如%s。它还能用来对值进行不同方式的格式化,包括左右对齐(- :左对齐)、设定字段宽度(%10f表字段宽度为10)以及精度值(%10.2f宽度10精度2),增加符号(+:正负号)或者左填充数字0等。
字符串方法:字符串有很多方法。
find:子串最左端索引,可加起始值参数;
join:连接字符串'+'.join(['1','2','3']),也就是将字符串列表['1','2','3']用+加号连接返回'1+2+3';
lower:返回小写字母版;
replace:查找并替换;
split:分割字符串如'1+2+3'.split('+');
strip:去除两侧空格,也可去除两侧其他指定字符strip('**');
translate:处理单个字符替换
from string import maketrans
table = maketrans('cs','kz')
'this is an incredible test'.translate(table,' ') #去除空格,可不要第二个参数
3.5.1 本章的新函数函数
描述
string.capwords(s[, sep])
使用split函数分割字符串s(以sep为分隔符),使用capitalize函数将分割得到的各单词首字母大写,并且使用sep为分隔符将个单词连接起来string.capwords('i am student', ' ')
(title的首字母大写不准确)
string.maketrans(from, to)
创建用于转换的转换表
table = maketrans('cs','kz')
'this is an incredible test'.translate(table,' ')
列表、字符串和字典是python中最重要的3种数据类型。下一章主要内容是字典,以及字典如何支持索引以及其他方式的键(如字符串和元组)。字典也提供了一些方法,但是数量没有字符串多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)