Python标准库提供给我们哪些强大又好用的模块呢?
格式化字符
格式化字符串: 常用的% 和 format方式来格式化字符串
s = """
Variable : %(var)s
Escape : %%
Variable in text : %(var)siable
"""
print('Interpolation:', s % values)
s = """
Variable :{var}
Escape : {{}}
Variable in text : {var}iable
"""
print('format', s.format(**values))
使用string.Template来格式化字符串, 这种方式不需要考虑参数格式的问题。默认都是字符串。
t = string.Template("""
Variable : $var
Escape : $$
Variable in text : ${var}siable
""")
print('template', t.safe_substitute(values))
注意点:
t.safe_substitute(values) # 异常情况不会抛出异常, 内容写在变量中
t.substitute(values) # 异常情况会抛出异常
string.Template 可以自定义匹配变量的符号,以及对变量的要求,看如下的例子:
string.Template实现%的功能:
class MyTemplate(string.Template):
delimiter = '%'
idpattern = '[a-z]+_[a-z]+'
template_text = '''
Delimiter: %%
Replaced: %a_b
Ignored: %ab
'''
d = {
'a_b': 'Replaced',
'ab': 'Ignored'
}
t = MyTemplate(template_text)
print(t.safe_substitute(d))
输出内容为:
Delimiter: %
Replaced: Replaced
Ignored: %ab
看来string.Template这样使用可以更加灵活了。
更复杂的,可以覆盖pattern属性来定义更复杂的匹配模式。
解决使用string.Template来完成format功能所面临的匹配{}的问题。
string.Template来实现format的功能:
class MyTemplate(string.Template):
delimiter = '{{'
# 打印 string.Template() 对象的.pattern.pattern属性查看
pattern = r'''
\{\{(?:
(?P<escaped>\{\{) | # Escape sequence of two delimiters
(?P<named>[_a-z][_a-z0-9]*)\}\} | # delimiter and a Python identifier
(?P<braced>[_a-z][_a-z0-9]*)\}\} | # delimiter and a braced identifier
(?P<invalid>) # Other ill-formed delimiter exprs
) # 此括号不能少
'''
t = MyTemplate('''
{{{{
{{var}}
''')
print('查看匹配的正则的内容: ', t.pattern.pattern)
print('格式化后的内容:', t.safe_substitute(var='abcde'))
输出内容为:
查看匹配的正则的内容:
\{\{(?:
(?P<escaped>\{\{) | # Escape sequence of two delimiters
(?P<named>[_a-z][_a-z0-9]*)\}\} | # delimiter and a Python identifier
(?P<braced>[_a-z][_a-z0-9]*)\}\} | # delimiter and a braced identifier
(?P<invalid>) # Other ill-formed delimiter exprs
) # 此括号不能少
格式化后的内容:
{{
abcde
使用textwrap对文本进行美化
示例如下:
sample_text = '''
The textwrap module can be used to format text for output in
situations where pretty-printing is desired. It offers
programmatic functionality similar to the paragraph wrapping
or filling features found in many text editors.
'''
print('o1:\n', sample_text)
import textwrap
dedented_text = textwrap.dedent(sample_text) # 移除文本每行前面所有空白
print('o2:\n', dedented_text)
original = textwrap.fill(dedented_text, width=50) # 首行缩进 限制宽度 文本规整很多
print('o3:\n', original)
shortened = textwrap.shorten(original, 100) # 长文本进行缩写显示
print('o4:\n', shortened)
shortened_wrapped = textwrap.fill(shortened, width=50) # 对缩写的内容进行格式化
print('o5:\n', shortened_wrapped)
输出效果为:
长文本缩进这个比较重要,因为一般对接页面输出的时候,经常会用到这个功能。