Python3中的格式化輸出

Python3字符串格式化輸出有兩種形式實現:

a:字符串格式化表達式: '...%...' % (values)

b:字符串格式化方法調用:'...{}...'.format(values)  或者 f'...{xx}...'

1:字符串格式化的類型碼(typecode)(表1)

 

代碼

意義

s

字符串(或任何對象的str(X)字符串)

r

與s相同,但使用repr,而不是str

c

字符(int和str)

d

十進制數字

i

整數

o

八進制整數(以8爲底)

x

十六進制整數(以16爲底)

X

同x,使用大寫字母

e

帶有指數的浮點數,小寫

E

同e,使用大寫字母

f

十進制浮點數

F

同f,使用大寫字母

g

浮點數e或f  (根據數字內容選擇e或f,下同)

G

浮點數E或F

2: 字符串格式化表達式

格式:%[(keyname)][flags][width][.precision]typecode   (表2)

選項

說明

keyname

爲索引在表達式右側使用的字典提供鍵名稱

flags

左對齊(-);數值符號(+);正數前的空白;負數前的-(空格);零填充(0)

 

width

最小字段寬度(至少顯示多少位)

.precision

小數點位數(浮點數精度)

typecode

上表(表1)列出的

2.1:整數的輸出

"""
%o —— oct 八進制
%d —— dec 十進制 
%x —— hex 十六進制
"""

# %d
a = 123
# 使用字典提供值
print('1---[%(age)d]=','[%(age)d]' % {'age':a} )
# %d
print('2---[%d]=','[%d]' % (a,))
# 前面帶 '+' 號
print('3---[%+d]=','[%+d]' % (a,))
# 最小寬度,默認右對齊
print('4---[%5d]=','[%5d]' % (a,))
# 最小寬度,默認右對齊,左邊補0
print('5---[%05d]=','[%05d]' % (a,))
# 最小寬度,左對齊
print('6---[%-5d]=','[%-5d]' % (a,))

"""
結果:
1---[%(age)d]= [123]
2---[%d]= [123]
3---[%+d]= [+123]
4---[%5d]= [  123]
5---[%05d]= [00123]
6---[%-5d]= [123  ]
"""

"""
上面是十進制的輸出,其他進制輸出,只要把d% 替換爲o%,x%即可。
%o  八進制
%x  十六進制
"""

2.2:浮點數的輸出:

%f:

#%f
a = 123.123456789
# 默認6位小數
print('1----%f=','[%f]' % (a,))
# 最小20位,7位小數,默認右對齊
print('2----%20.7f=','[%20.7f]' % (a,))
# 最小20位,7位小數,右對齊,左邊補0
print('3----%020.7f=','[%020.7f]' % (a,))
# 最小20位,7位小數,左對齊
print('4----%-20.7f=','[%-20.7f]' % (a,))

"""
結果:
1----%f= [123.123457]
2----%20.7f= [         123.1234568]
3----%020.7f= [000000000123.1234568]
4----%-20.7f= [123.1234568         ]
"""

%e:

#%e
a = 123.123456789
# 默認6位小數
print('1----%f=','[%e]' % (a,))
# 最小20位,7位小數,默認右對齊
print('2----%20.7f=','[%20.7e]' % (a,))
# 最小20位,7位小數,右對齊,左邊補0
print('3----%020.7f=','[%020.7e]' % (a,))
# 最小20位,7位小數,左對齊
print('4----%-20.7f=','[%-20.7e]' % (a,))

"""
結果:
1----%e= [1.231235e+02]
2----%20.7e= [       1.2312346e+02]
3----%020.7e= [00000001.2312346e+02]
4----%-20.7e= [1.2312346e+02       ]
"""

%g:根據顯示內容選擇格式:
規則爲:指數小於-4,或者 指數大於等於精度 使用指數格式e,其他情況使用小數格式f
 

"""
#%g:默認精度爲6
根據顯示內容選擇格式:
規則爲:指數小於-4,或者 指數大於等於精度 使用指數格式e,其他情況使用小數格式f
舉例:
a = 123456.123456789
a = 123456.123456789 = 1.23456123456789e+05  指數爲5

"""
a = 123456.123456789
# 
# %g 精度默認爲6位,a的指數爲5,使用小數格式f
print('1----%g=','[%g]' % (a,))

# %10.2g  精度爲2,a的指數爲5,使用指數格式e
print('2----%10.2g=','[%10.2g]' % (a,))

# %.4g  精度爲4,a的指數爲5,使用指數格式e
print('3----%.4g=','[%.4g]' % (a,))

# %020.7g  精度爲7,a的指數爲5,使用小數格式f
print('4----%020.7g=','[%020.7g]' % (a,))

# %020.7g  精度爲7,a的指數爲5,使用小數格式f
print('5----%-20.7g=','[%-20.7g]' % (a,))


"""
1----%g= [123456]
2----%10.2g= [   1.2e+05]
3----%.4g= [1.235e+05]
4----%020.7g= [000000000000123456.1]
5----%-20.7g= [123456.1            ]
"""

2.3:字符串輸出:
 

'''
%s
%10s   ——右對齊,佔位符10位
%-10s  ——左對齊,佔位符10位
%.2s   ——截取2位字符串
%10.2s ——10位佔位符,截取兩位字符串

'''
s = 'abcdef'
print('1--[%s]=','[%s]' % s)
print('2--[%10s]=','[%10s]' % s)
print('3--[%-10s]=','[%-10s]' % s)
print('4--[%.2s]=','[%.2s]' % s)
print('5--[%10.2s]=','[%10.2s]' % s)
print('6--[%-10.2s]=','[%-10.2s]' % s)

"""
1--[%s]= [abcdef]
2--[%10s]= [    abcdef]
3--[%-10s]= [abcdef    ]
4--[%.2s]= [ab]
5--[%10.2s]= [        ab]
6--[%-10.2s]= [ab        ]
"""

 

3: 字符串格式化方法調用:format()

格式:{fieldname component !conversionflag  : formatspec}   (表3)

選項

說明

示例

結果

fieldname

識別參數的一個可選的數字或關鍵字。也可以省略以使用相對參數編號。

# 參數出現的位置,順序可以打亂。

print('1----:age:{1},name:{0} '.format('ixusy88',18))

 

# 參數出現的位置,默認相對位置

print('2----:name:{},age:{} '.format('ixusy88',18))

 

# 關鍵字參數

print('3----:name:{name},age:{age} '.format(name='ixusy88',age=18))

 

# 關鍵字參數,順序可以打亂。

print('4----:age:{age},name:{name}'.format(name='ixusy88',age=18))

1----:age:18,name:ixusy88

2----:name:ixusy88,age:18

3----:name:ixusy88,age:18

4----:age:18,name:ixusy88

component

參數的屬性

import sys

print('平臺:{0.platform} ;name:{1[name]},age:{1[age]}'.format(sys,{'name':'ixusy88','age':18}))

print('第二個是:{0[1]},第一個是:{0[0]}'.format([11,22,33]))

平臺:win32 ;name:ixusy88,age:18

第二個是:22,第一個是:11

!conversionflag

以!開始,後面跟着r,s或者a,那麼在這個值上分別調用repr,str,ascii內置函數

print('{1!r}'.format(1,'abc',3))

print('{1!s}'.format(1,'abc',3))

print('{1!a}'.format(1,'abc',3))

'abc'

abc

'abc'

formatspec

格式化:以:開始,後面跟着文本,指定如何顯示該值:包括字段寬度,對齊方式,補0,小數精度,數據類型碼等;(formatspec本身也有着豐富的格式,見表4)

見(表4)

 

 

formatspec格式:[[fill]align][sign][#][0][width][,][.precision][typecode]  (表4)

選項

說明

fill

除{和}之外的任意填充字符

align

<:左對齊
>:右對齊
=:符號字符後的填充
^:居中對齊

sign

正負號:可以是+,-,空格

#

給u二進制數加上 0b 前綴

給八進制數加上 0o 前綴

給十六進制數加上 0x 前綴

0

填充0

,

千分位分隔符

.precision

精度

typecode

類型碼(表1列出的)


  # fieldname

# 參數出現的位置,順序可以打亂。
print('1----:age:{1},name:{0} '.format('ixusy88',18))

# 參數出現的位置,默認相對位置
print('2----:name:{},age:{} '.format('ixusy88',18))

# 關鍵字參數 
print('3----:name:{name},age:{age} '.format(name='ixusy88',age=18)) 

# 關鍵字參數,順序可以打亂。
print('4----:age:{age},name:{name}'.format(name='ixusy88',age=18))


import sys
# 屬性,字典
print('5----:平臺:{0.platform} ;name:{1[name]},age:{1[age]}'.format(sys,{'name':'ixusy88','age':18}))
print('6----:第二個是:{0[1]},第一個是:{0[0]}'.format([11,22,33]))

#解包
st = (10,20,30,)
print('7----:第二個是:{1},第一個是:{0}'.format(*st))

lst = [100,200,300]
print('8----:第二個是:{1},第一個是:{0}'.format(*lst))


"""
結果:
1----:age:18,name:ixusy88 
2----:name:ixusy88,age:18 
3----:name:ixusy88,age:18 
4----:age:18,name:ixusy88
5----:平臺:win32 ;name:ixusy88,age:18
6----:第二個是:22,第一個是:11
7----:第二個是:20,第一個是:10
8----:第二個是:200,第一個是:100
"""

整數:

# 整數
a = 100
print('1----[{0}]'.format(a))
#最小顯示10位,默認右對齊
print('2----[{0:10}]'.format(a))
#最小顯示10位,左對齊
print('3----[{0:<10}]'.format(a))

#最小顯示10位,居中
print('4----[{0:^10}]'.format(a))

#最小顯示10位,居中,使用字符d填充剩下的
print('5----[{0:d^10}]'.format(a))

#,逗號,千分爲分隔符
print('6----[{0:,d}]'.format(999999))

"""
結果:
1----[100]
2----[       100]
3----[100       ]
4----[   100    ]
5----[ddd100dddd]
6----[999,999]
"""

浮點數:

a = 1234567.123456789
#a = 1234567.123456789 = 1.234567123456789e+06
print('1----:','[{0:f}]'.format(a))
# 最小顯示10位,2位精度,默認右對齊
print('2----:','[{0:10.2}]'.format(a))
# 最小顯示10位,2位精度,左對齊
print('3----:','[{0:<10.2}]'.format(a))
# 最小顯示10位,2位精度,居中
print('4----:','[{0:^10.2}]'.format(a))
# 使用字符m填充剩下的
print('5----:','[{0:m^10.2}]'.format(a))

"""
1----: [1234567.123457]
2----: [   1.2e+06]
3----: [1.2e+06   ]
4----: [ 1.2e+06  ]
5----: [m1.2e+06mm]
"""

二進制,八進制,十六進制:

a = 100
# '#' 號會加前綴 
print('二進制:{0:b},{0:#b}'.format(a))
print('八進制:{0:o},{0:#o}'.format(a))
print('十六進制:{0:x},{0:#x}'.format(a))
"""
二進制:1100100,0b1100100
八進制:144,0o144
十六進制:64,0x64
"""

4:format的用法變形: f'{name}'
f'{name}':
可以在字符串前加f以達到格式化的目的,在{}里加入變量,在{}裏面,可以像在代碼塊中一樣使用此變量(比如調用屬性,方法,把它作爲其他函數的參數等)
 

# 1: a.format(b)
print('1----:','a.format(b):')
s1 = 'Hello'
s2 = 'World'
print('2----:','{0} {1} '.format(s1,s2))

print('**************')
"""
f'{name}':
可以在字符串前加f以達到格式化的目的,在{}里加入變量名,在{}裏面,
可以像在代碼塊中一樣使用此變量(比如調用屬性,方法,把它作爲其他函數的參數等)
"""
s1 = 'Hello'
s2 = 'World'
print('3----:',f'{s1} {s2}')
print('4----:',f'{len(s1)} {s2.count("o")} {s2.upper()}') # 還可以使用函數


name = 'ixusy88'
age = 18
sex = 'Man'
job = "IT"
salary = 8888.9868

# 調用它的方法;作爲函數的參數
print('5----:',f'my name is {name.capitalize()}. the len of {name} is {len(name)}')
# 也可以使用相應的格式
print('6----:',f'I am {age:*^10} years old.')
print('7----:',f'I am a {sex}')
print('8----:',f'My salary is {salary:10.3f}')

# 還可以在{} 中進行if判斷
print('9----:',f'sex is  {"男" if sex == "Man" else "女"}')


import sys
print('10----:',f'Platform is {sys.platform}')


st = ('123','345','567',)
print('11----:',f'{st}')
# 取某個元素
print('12----:',f'{st[0]}')

dic = {'name':'ixusy88','age':18}
print('13----:',f'dic={dic},age={dic["age"]}')
# 推導式:
print('14----:',f'{[x for x in st]}')


"""
輸出結果:
1----: a.format(b):
2----: Hello World 
**************
3----: Hello World
4----: 5 1 WORLD
5----: my name is Ixusy88. the len of ixusy88 is 7
6----: I am ****18**** years old.
7----: I am a Man
8----: My salary is   8888.987
9----: sex is  男
10----: Platform is win32
11----: ('123', '345', '567')
12----: 123
13----: dic={'name': 'ixusy88', 'age': 18},age=18
14----: ['123', '345', '567']
"""

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章