《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 >>> 
safe_substitute不产生异常

 可以修改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属性,定义一个全新的正则表达式。

posted on 2015-08-09 11:58  随意地行走  阅读(2032)  评论(0编辑  收藏  举报

导航