string 模块大部分功能已被 str对象 实现,但一些字符常量人保留了下来

字符串常量

string 模块中保留了常见的字符串常量,并给特定的常量规了类。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# string.py

# Some strings for ctype-style character classification
whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace

例如,是否是大小写字符,就可以通过 ascii_lowercaseascii_uppercase 两个判断。

1
2
3
4
import string

if 's' in string.ascii_lowercase:
    print('s in ascii_lowercase.')

Formatter和Template

string 模块中,format 需要通过 Formatter类 实现,template 需要通过 Template类 实现,现在这两项功能已经在 str对象 中由 format() 同一实现。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def FormatterTest():
    """string formatter class test"""

    format_string = string.Formatter()
    s_1 = format_string.format("{a} + {b} = {c}", a = 1, b = 2, c = 3)  # same as str.format()
    print(s_1)

    print("{a} + {b} = {c}".format(a = 1, b = 2, c = 3))

def TemplatesTest():
    """diff templates compare"""

    values = {'var': 'foo'}
    t_1 = string.Template("""
    Variable        : $var
    Escape          : $$
    Variable in text: ${var}iable
    """)
    print('string Template:', t_1.substitute(values))

    t_2 = """
       Variable        : %(var)s
       Escape          : %%
       Variable in text: %(var)siable
       """
    print('Interpolation:', t_2 % values)

    t_3 = """
       Variable        : {var}
       Escape          : {{}}
       Variable in text: {var}iable
       """
    print('Format:', t_3.format(**values))

一些有趣的str对象函数总结

str对象 中,有一些比较有趣,平时用的比较少的函数。

  • capitalize - 将字符串的首字母大小,其他位置小写。
  • title - 将每个单词的首字母大写,其他位置小写。
  • casefold - 将每个字符都转换为小写,和lower不同的是,casefold是严格的转换,例如 将 ß 转换为 ss
  • center - 将字符串居中,其他位置用指定字符填充
  • isprintable - 字符串是否为可以打印的字符串,其他的is开头的函数类似。
  • partition - 将字符串按指定字符分割成三块,指定字符前为head,指定字符为一部分,指定字符后为tail。类似于split。
  • maketrans - 制作字符转换map。
  • translate - 使用字符转换map转换字符串中的对应字符。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
def StrFunction():
    s_1 = "hello wOrld"
    print("s_1.capitalize() -> ", s_1.capitalize())
    print("s_1.title() -> ", s_1.title())
    print("s_1.casefold() -> ", s_1.casefold())
    print("s_1.center() -> ", s_1.center(20, 'z'))
    print("s_1.isprintable() -> ", s_1.isprintable())
    print("s_1.partition() -> ", s_1.partition('l'))
    print("s_1.rpartition() -> ", s_1.rpartition('l'))

    trantab = str.maketrans('aeiou', '12345')
    print("s_1.translate() -> ", s_1.translate(trantab))

# output
s_1.capitalize() ->  Hello world
s_1.title() ->  Hello World
s_1.casefold() ->  hello world
s_1.center() ->  zzzzhello wOrldzzzzz
s_1.isprintable() ->  True
s_1.partition() ->  ('he', 'l', 'lo wOrld')
s_1.rpartition() ->  ('hello wOr', 'l', 'd')
s_1.translate() ->  h2ll4 wOrld