目录

  • 字符串常量(String constants)
  • 使用format格式化字符串
  • 按位置输出字符
  • 按名字输出字符
  • 按属性输出字符
  • 按子项输出字符
  • 替代%s与%r
  • 文本对齐和指定宽度
  • 替代%+f, %-f, 与 % f
  • 替代%x和%o并将值转换为不同的基数
  • 使用逗号作为千位分隔符
  • 表示百分数
  • 指定日期显示格式
  • 更复杂的例子
  • 模板字符串(Template strings)


字符串常量(String constants)

# -*- coding: utf-8 -*-

import string

# 1
print(string.ascii_letters) # 大小写字母
# 输出:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

# 2
print(string.ascii_lowercase) # 小写字母
# 输出:abcdefghijklmnopqrstuvwxyz

# 3
print(string.ascii_uppercase) # 大写字母
# 输出:ABCDEFGHIJKLMNOPQRSTUVWXYZ

# 4
print(string.digits) # 10进制
# 输出:0123456789

# 5
print(string.hexdigits) # 16进制
# 输出:0123456789abcdefABCDEF

# 6
print(string.octdigits) # 8进制
# 输出:01234567

# 7
print(string.punctuation) # 标点
# 输出:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

# 8
print(string.printable) # 可打印字符
# 输出:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

# 9
print(string.whitespace) # 空白字符
# 输出:空格、制表符,换行符,返回,换页符等

使用format格式化字符串

按位置输出字符

# -*- coding: utf-8 -*-

# 1
print('{0}, {1}, {2}'.format('a', 'b', 'c'))
# 输出:a, b, c

# 2
print('{2}, {1}, {0}'.format('a', 'b', 'c'))
# 输出:c, b, a

# 3
print('{2}, {1}, {0}'.format(*'abc'))
# 输出:c, b, a

# 4
print('{0}, {1}, {0}'.format('a', 'b'))
# 输出:a, b, a

按名字输出字符

# -*- coding: utf-8 -*-

# 1
print('Me:{firstName} {lastName}'.format(lastName='X', firstName='Coder'))
# 输出:Me:Coder X

# 2
MyName = {'firstName': 'Coder', 'lastName': 'X'}
print('Me:{firstName} {lastName}'.format(**MyName))
# 输出:Me:Coder X

按属性输出字符

# -*- coding: utf-8 -*-

# 1
x = 1 - 2j # x是一个复数:实数部分和虚数部分都是浮点数,虚数部分必须有j或J
print('real: {0.real}, imaginary {0.imag}'.format(x))
# 输出:real: 1.0, imaginary -2.0

# 2
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return 'Point(x:{0.x}, y:{0.y})'.format(self)

    __repr__ = __str__

p = Point(1, 3)
print(p)
# 输出:Point(x:1, y:3)

按子项输出字符

# -*- coding: utf-8 -*-

# 1
x = (2, 3)
print('x is {0[0]}, {0[1]}'.format(x))
# 输出:x is 2, 3

替代%s与%r

# -*- coding: utf-8 -*-

# 1
print("{!r}, {!s}".format('repr', 'str'))
# 输出:'repr', str
# 说明: {!r}中的r表repr(),输出带''号;s表str(),输出不代引号

文本对齐和指定宽度

# -*- coding: utf-8 -*-

# 1
print('start, {:<30}, end.'.format('left aligned'))
# 输出:start, left aligned                  , end.
# 说明: 向左对齐,字宽30位,不足默认用空白填充

# 2
print('start, {:>30}, end.'.format('right aligned'))
# 输出:start,                  right aligned, end.
# 说明: 向右对齐,字宽30位,不足默认用空白填充

# 3
print('start, {:*^30}, end.'.format('right aligned'))
# 输出:start, ********right aligned*********, end.
# 说明: 居中对齐,字宽30位,不足用*号填充

替代%+f, %-f, 与 % f

# -*- coding: utf-8 -*-

# 1
print('{:+0.2f}; {:+f}'.format(3.14, -3.14))
# 输出:+3.140000; -3.140000
# 说明: 正负号常显示

# 2
print('{: f}; {: f}'.format(3.14, -3.14))
# 输出: 3.140000; -3.140000
# 说明: 正号用空白表示

# 3
print('{:-f}; {:-f}'.format(3.14, -3.14))
# 输出:3.140000; -3.140000
# 说明: 只显示负号

替代%x和%o并将值转换为不同的基数

# -*- coding: utf-8 -*-

# 1
print("int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42))
# 输出:int: 42;  hex: 2a;  oct: 52;  bin: 101010

# 2
print("int: {0:#d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42))
# 输出: int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010

使用逗号作为千位分隔符

# -*- coding: utf-8 -*-

# 1
print('{:,}'.format(1234567890))
# 输出:1,234,567,890

表示百分数

# -*- coding: utf-8 -*-

# 1
point = 2
total = 5
print('result: {:0.2%}'.format(point/total))
# 输出:result: 40.00%

指定日期显示格式

# -*- coding: utf-8 -*-

import datetime
# 1
d = datetime.datetime(2019, 4, 29, 15, 11, 58)
print('{:%Y-%m-%d %H:%M:%S}'.format(d))
# 输出:2019-04-29 15:11:58

更复杂的例子

# -*- coding: utf-8 -*-

for align, text in zip('<^>', ['left', 'center', 'right']):
    print( '{0:{fill}{align}16}'.format(text, fill=align, align=align))
    # 输出:
    # left<<<<<<<<<<<<
    # ^^^^^center^^^^^
    # >>>>>>>>>>>right

模板字符串(Template strings)

模板字符串的主要用例是用于国际化,下面用一个例子简单介绍一下:

# -*- coding: utf-8 -*-

from string import Template

s = Template('$who $do $what.') # 其中$identifier,相当于是在定义变量

print(s.substitute(who='I', do='love', what='you'))
# 输出:I love you.

print(s.substitute(who='我', do='爱', what='你'))
# 输出:我 爱 你.

# s.substitute(who='我', do='爱')
# 说明:substitute函数接收的参数内容与定义不相符时,报KeyError异常

print(s.safe_substitute(who='我', do='爱'))
# 输出:我 爱 $what.
# 说明:safe_substitute函数在少参数时,把参数原样输出。

以上就是模板字符串的大致用法。