《python标准库》--string
作用:包含处理文本的常量和类。
1、capwords():将一个字符串中所有单词的首字母大写。
1 >>> import string 2 >>> s = 'The quick brown fox jumped over the lazy dog.' 3 >>> print s 4 The quick brown fox jumped over the lazy dog. 5 >>> print string.capwords(s) 6 The Quick Brown Fox Jumped Over The Lazy Dog. 7 >>>
2、maketrans():创建转换表,可以用例结合translate()方法将一组字符修改为另一组字符,这种做法比反复调用replace()更为高效。
1 >>> import string 2 >>> leet = string.maketrans('abegiloprstz','463611092572') 3 >>> s = 'The quick brown fox jumped over the lazy dog' 4 >>> print s 5 The quick brown fox jumped over the lazy dog 6 >>> print s.translate(leet) 7 Th3 qu1ck 620wn f0x jum93d 0v32 7h3 142y d06
如果反过来,我们是得不到原来的句子的,因为前面的数字字符串‘463611092572’有重复的数字字符,替换的时候它们会被替换成最后一个数字对于的字符,
如6会被替换成‘g’而不是‘b’
1 >>> leet = string.maketrans('463611092572','abegiloprstz') 2 >>> t = 'Th3 qu1ck 620wn f0x jum93d 0v32 7h3 142y d06' 3 >>> t.translate(leet) 4 'The qulck gzown fox jumped ovez the lazy dog'
我们再来看看这个‘leet’是什么?看起来是ascll字符集,而且其中的数字0-9中的部分数字已经按照上面的对应关系被替换成字母了。所以翻译的时候,数字就会
被翻译成对应的字符。
1 >>> leet 2 '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./olzeasgt8p:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
模板
下面的例子对一个简单的模板和一个使用%操作符的类似字符串拼接进行了比较。
1 import string 2 3 values = { 'var':'foo'} 4 5 t = string.Template(""" 6 Variable : $var 7 Escape : $$ 8 Variable in text: ${var}iable 9 """) 10 11 print 'TEMPLATE:', t.substitute(values) 12 13 s = """ 14 Variable : %(var)s 15 Escape : %% 16 Variable in test: %(var)siable 17 """ 18 19 print 'INTERPOLATION:', s % values 20 21 >>> ================================ RESTART ================================ 22 >>> 23 TEMPLATE: 24 Variable : foo 25 Escape : $ 26 Variable in text: fooiable 27 28 INTERPOLATION: 29 Variable : foo 30 Escape : % 31 Variable in test: fooiable 32 33 >>>
可以看到,触发字符($或者%)都要写两次来完成转义。它们的重要区别是:模板不考虑参数类型。值会转换为字符串,再将字符串插入到结果中。这里没有提供
格式化选项。例如,没有办法控制使用几位有效数字来表示一个浮点数值。这有一个好处:通过使用safe_substitute()方法,可以避免未能提供模板所需全部参数值时可能产生的异常。
1 import string 2 3 values = { 'var':'foo'} 4 5 t = string.Template("$var is here but $missing is not provided") 6 try: 7 print 'substitute() :', t.substitute(values) 8 except KeyError, err: 9 print 'ERROR:',str(err) 10 11 print 'safe_substitute():', t.safe_substitute(values) 12 13 >>> ================================ RESTART ================================ 14 >>> 15 substitute() : ERROR: 'missing' 16 safe_substitute(): foo is here but $missing is not provided 17 >>>
可以修改string.Template的默认语法,为此要调整它在模板体中查找变量名所使用的正则表达式模式。一种简单的做法是修改delimiter和idpattern类属性。
1 import string 2 3 template_text = ''' 4 Delimiter : %% 5 Replaced : %with_underscore 6 Ignored : %notunderscored 7 ''' 8 9 d = { 'with_underscore':'replaced', 10 'notunderscored':'not replaced', 11 } 12 13 class MyTemplate(string.Template): 14 delimiter = '%' 15 idpattern = '[a-z]+_[a-z]+' 16 17 t = MyTemplate(template_text) 18 print 'Modified ID pattern:' 19 print t.safe_substitute(d) 20 >>> ================================ RESTART ================================ 21 >>> 22 Modified ID pattern: 23 24 Delimiter : % 25 Replaced : replaced 26 Ignored : %notunderscored 27 28 >>>
要完成更复杂的修改,可以覆盖pattern属性,定义一个全新的正则表达式。