zoukankan      html  css  js  c++  java
  • python之格式化字符串速记整理

     

    一、格式化字符串的方式:

    1、字符串表达式:

    语法格式:‘%s’ % var 或 ‘%s %d’ % (var1, var2)

    说明:%s、%d等为格式类型说明符

    例子:

    >>> 'this is a %s' % ('pear')
    'this is a pear'
    >>> 'there are %d %s and %d %s' % (2, 'pear', 5, 'apple')
    'there are 2 pear and 5 apple'

    #使用字典格式 >>> 'there are %(count)d %(fruit)s' % {'count':5, 'fruit':'apples'} 'there are 5 apples'

    2、字符串format方法:

    语法格式:str.format()

    说明:使用字符串的format方法

    例子:

    #使用相对位置参数
    >>> astring = 'there are {} {} and {} {}' >>> astring.format(2, 'pears', 5, 'apples') 'there are 2 pears and 5 apples'

    #使用绝对位置参数 >>> astring = 'there are {0} {1} and {0} {2}' >>> astring.format(2, 'pears', 'apples') 'there are 2 pears and 2 apples'

    #使用关键字参数 >>> astring = 'there are {count} {fruit1} and {count} {fruit2}'
    >>> astring.format(count=2, fruit1='pears', fruit2='apples')
    'there are 2 pears and 2 apples'

    3、format内建函数:

    语法格式:format(value[, format_spec])

    说明:第1个参数为字符串、数字等,第2个参数为格式说明符,省略格式说明符,就相当于str(value)

    例子:

    #缺省类型为s(字符串),可以省略不写
    >>> format('^表示居中,10表示宽度,不够的位用#填充','#^10') '^表示居中,10表示宽度,不够的位用#填充'
    >>> format(123,'b') '1111011' >>> format(123,'#b') '0b1111011' >>>

    4、已格式化的字符串直接量(也就是一个带格式的字符串,简称f-strings):

    语法格式:f'{expression[:format-spicifier]}'

    说明:类似于r'string'、b'byte sequence'的风格,f也可以是大写的F,表达式expression可以是直接量、变量,对象属性,函数调用、模块方法执行等,还可以结合!s或!r对表示执行str或repr函数。格式化说明符可以省略。

    例子:

    >>> f'{10:b}'  
    '1010'         
    >>> f'{10:x}'  
    'a'            
    >>> f'{12:x}'  
    'c'            
    >>> f'{12:X}'  
    'C'            
    >>> f'{12:#X}' 
    '0XC'
    >>> f'{12:02X}'
    '0C'
    >>> f'{12:2X}' 
    ' C'
    >>> F'this is a hex number {12:#2X} and an octet number {29:#o}'
    'this is a hex number 0XC and an octet number 0o35'
    >>> import random
    >>> F'this is a hex number {random.randint(100,500):#2X} and an octet number {29:#o}'
    'this is a hex number 0X8A and an octet number 0o35' 
    >>> import math
    >>> print(f'The value of pi is approximately {math.pi:.3f}.')
    The value of pi is approximately 3.142.
    #表示式为变量,效果类似于shell字符串中变量替换,同时还可以在替换后进行格式化
    >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678} >>> for name, phone in table.items(): ... print(f'{name:10} ==> {phone:10d}') ... Sjoerd ==> 4127 Jack ==> 4098 Dcab ==> 7678
    >>> animals = 'eels'
    >>> print(f'My hovercraft is full of {animals}.')
    My hovercraft is full of eels.
    >>> print(f'My hovercraft is full of {animals!r}.')
    My hovercraft is full of 'eels'.

    5、字符串手动格式化

    语法格式:str.rjust([width][, padding-char])、str.rjust([width][, padding-char])、center([width][, padding-char])、str.zfill()

    说明:字符串的左、右、中对齐方法,第1个参数为宽度,第2个为字符串宽度小于指定宽度后填充的字符,缺省为空格。str.zfill()用于数字串填充0

    例子:

    >>> '12'.zfill(5)
    '00012'
    >>> '-3.14'.zfill(7)
    '-003.14'
    >>> '3.14159265359'.zfill(5)
    '3.14159265359'
    >>> 'this is a left indent string'.ljust(40)
    'this is a left indent string            '
    >>> 'this is a left indent string'.ljust(40,'-')
    'this is a left indent string------------'
    >>>  

    二、通用标准格式化说明符及特殊格式说明符如下:

    format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
    fill            ::=  <any character>
    align           ::=  "<" | ">" | "=" | "^"
    sign            ::=  "+" | "-" | " "
    width           ::=  digit+
    grouping_option ::=  "_" | ","
    precision ::= digit+ type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X"

     旧的字符串表达式格式:

    >>> '%#x' % 255, '%x' % 255, '%X' % 255
    ('0xff', 'ff', 'FF')
    >>> format(255, '#x'), format(255, 'x'), format(255, 'X')
    ('0xff', 'ff', 'FF')
    >>> f'{255:#x}', f'{255:x}', f'{255:X}'
    ('0xff', 'ff', 'FF')

    表示一个百分号%使用特殊类型符%:

    >>> points = 19
    >>> total = 22
    >>> 'Correct answers: {:.2%}'.format(points/total)
    'Correct answers: 86.36%'

    使用时间专用格式:

    >>> import datetime
    >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
    >>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
    '2010-07-04 12:15:58'

    嵌套参数和更复杂例子:

    >>> for align, text in zip('<^>', ['left', 'center', 'right']):
    ...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)
    ...
    'left<<<<<<<<<<<<'
    '^^^^^center^^^^^'
    '>>>>>>>>>>>right'
    >>>
    >>> octets = [192, 168, 0, 1]
    >>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
    'C0A80001'
    >>> int(_, 16)
    3232235521
    >>>
    >>> width = 5
    >>> for num in range(5,12): 
    ...     for base in 'dXob':
    ...         print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
    ...     print()
    ...
        5     5     5   101
        6     6     6   110
        7     7     7   111
        8     8    10  1000
        9     9    11  1001
       10     A    12  1010
       11     B    13  1011

    更详细的格式化说明可以参见python3.7.1参考手册的章节:7.1. Fancier Output Formatting

  • 相关阅读:
    TCP/IP网络编程之优于select的epoll(一)
    TCP/IP网络编程之I/O流分离
    TCP/IP网络编程之套接字与标准I/O
    TCP/IP网络编程之多播与广播
    TCP/IP网络编程之多种I/O函数
    TCP/IP网络编程之I/O复用
    TCP/IP网络编程之进程间通信
    TCP/IP网络编程之多进程服务端(二)
    服务器被入侵了怎么办?
    sentos7为例添加python3和python2共存
  • 原文地址:https://www.cnblogs.com/dingbj/p/format.html
Copyright © 2011-2022 走看看