Python基礎學習篇-3- 如何使用 各種佔位符 和 %方式 Format方式 進行格式化輸出?

testingbang發表於2019-08-25

使用python進行格式化輸出時,問題遇到一些小問題,所以徹底做一次大總結。

在python中進行格式化輸出有兩種方式:

百分號方式、Format方式

說明:

(本文示例使用Python3.6環境)

下文介紹的Format()方式是比較新的函式, 但是目前大多數的 Python 程式碼仍然使用 % 運算子,所以兩種方式都要掌握。Python官網說%這種舊式的格式化最終會從該語言中移除,所以 應該更多的使用 Format()方式。

一、百分號 方式
語法格式:
(其中【】內的欄位為可選項,其它為必選項)

% [(name)] [flags] [width] .[precision] typecode

(name) 可選,用於選擇指定的key
flags 可選,可供選擇的值有:

Flags   作用1   作用2
+   右對齊   正數前加正號,負數前加負號
-   左對齊   正數前無符號,負數前加負號
空格   右對齊   正數前加空格,負數前加負號
0   右對齊   正數前無符號,負數前加負號 用0填充空白處
width 可選,佔有寬度
.precision 可選,小數點後保留的位數
typecode 必選,要替換的值型別,可供選擇的值有:

typecode   作用
s   獲取傳入物件的__str__方法的返回值,並將其格式化到指定位置
d   將整數、浮點數轉換成 十 進製表示,並將其格式化到指定位置
e   將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(小寫e)
E   將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(大寫E)
f   將整數、浮點數轉換成浮點數表示,並將其格式化到指定位置(預設保留小數點後6位)
F   同上
o   將整數轉換成 八 進製表示,並將其格式化到指定位置
g   自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是e;)
G   作用同上,只是如果是科學計數則是E
c   整數:將數字轉換成其unicode對應的值,10進位制範圍為 0 <= i <= 1114111字元,並將字元新增到指定位置
r   獲取傳入物件的__repr__方法的返回值,並將其格式化到指定位置
%   當字串中存在格式化標誌時,需要用 %%表示一個百分號
注:Python中百分號格式化是不存在自動將整數轉換成二進位制表示的方式

百分號方式格式化示例:
>>> print("a = a%+d" %2)
a = a+2
>>> print("a = a%+d" %-2)
a = a-2
>>>
>>>> print("a = a%-d" %2)
a = a2
>>> print("a = a%-d" %-2)
a = a-2
>>>
>>> print("a = a% d" %2)
a = a 2
>>> print("a = a% d" %-2)
a = a-2
>>>
>>> print("a = a%0d" %2)
a = a2
>>> print("a = a%0d" %-2)
a = a-2
>>>
>>>
>>> print("i am %s" %"angle")
i am angle
>>> print("i am %s age %d" %("angle",18))
i am angle age 18
>>> print("i am %(name)s age %(age)d" %{"name":"angle", "age":18})
i am angle age 18
>>>
>>>
>>> print("percent is %.2f"%99.99999)
percent is 100.00
>>> print("percent is %.2f"%99.123999)
percent is 99.12
>>> print("percent is %(aa).2f"%{"aa": 99.15,})
percent is 99.15 
>>> print("percent is %(aa).2f %%"%{"aa": 99.17234,})
percent is 99.17 %
>>>

二、Format方式格式化示例
    可用於格式化輸出,也可單獨對資料、字串進行格式化
1
語法格式:
[ [fill] align] [sign] [#] [0] [width] [,] [.precision] [type]

fill 【可選】空白處填充的字元
align 【可選】對齊方式(需配合width使用)

align   作用
<   內容左對齊
>   內容右對齊(預設)
=   內容右對齊,將符號放置在填充字元的左側,且只對數字型別有效。 即:符號+填充物+數字
^   內容居中
sign 【可選】有無符號數字

align   作用
+   正號加正,負號加負
-   正號不變,負號加負
空格   正號空格,負號加負
# 【可選】對於二進位制、八進位制、十六進位制,如果加上#,會顯示 0b/0o/0x,否則不顯示

, 【可選】為數字新增分隔符,如:1,000,000

width 【可選】格式化位所佔寬度

.precision 【可選】小數位保留精度

type 【可選】格式化型別

typecode   作用
傳入字串型別的引數時:  
s   格式化字串型別資料
空白   未指定型別,則預設是None,同s
傳整數型別的引數時:  
b   將10進位制整數自動轉換成2進製表示然後格式化
c   將10進位制整數自動轉換為其對應的unicode字元
d   十進位制整數
o   將10進位制整數自動轉換成8進製表示然後格式化
x   將10進位制整數自動轉換成16進製表示然後格式化(小寫x)
X   將10進位制整數自動轉換成16進製表示然後格式化(大寫X)
傳入“ 浮點型或小數型別 ”的引數:  
e   轉換為科學計數法(小寫e)表示,然後格式化
E   轉換為科學計數法(大寫E)表示,然後格式化
f   轉換為浮點型(預設小數點後保留6位)表示,然後格式化
F   轉換為浮點型(預設小數點後保留6位)表示,然後格式化
g   自動在e和f中切換
G   自動在E和F中切換
%   顯示百分比(預設顯示小數點後6位)
Format方式格式化示例:
>>>**大括號及其裡面的字元 (稱作格式化欄位) 將會被 format() 中的引數替換**
>>> print("i am {}, age {}, {}".format("yolanda", 18, 'hello'))
i am yolanda, age 18, hello
>
>>> print("i am {}, age {}, {}".format(*["yolanda", 18, 'hello']))
i am yolanda, age 18, hello
>
>>> print("i am {}, age {}, {}".format(*["yolanda", 18]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range

>>>**在大括號中的數字用於指向傳入物件在 format() 中的位置**
>>> print("i am {0}, age {1}, name {0}".format(*["yolanda", 18]))
i am yolanda, age 18, name yolanda
>
>>> print("i am {0}, age {1}, name {0}".format("yolanda", 18))
i am yolanda, age 18, name yolanda
>
>>> print("i am {0}, age {1}, name {0}".format(["yolanda", 18]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
>>>

>>>**如果在 format() 中使用了關鍵字引數, 那麼它們的值會指向使用該名字的引數**
>>> print("i am {name}, age {age}, name {name}".format(name="yolanda", age=18))
i am yolanda, age 18, name yolanda
>
>>> print("i am {name}, age {age}, name {name}".format(*{"name": "yolanda", "age":18}))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'name'

>>> print("i am {name}, age {age}, name {name}".format(**{"name": "yolanda", "age":18}))
i am yolanda, age 18, name yolanda
>>>
>>> print("i am {0[0]}, age {0[1]}, name {0[2]}; you are {1[0]}, age {1[1]}, name {1[2]}".format([1,2,3], [11,22,33]))
i am 1, age 2, name 3; you are 11, age 22, name 33
>>>  
>>>
>>> print("i am {:s}, age {:d}, money {:f}".format("yolanda", 18, 9999999.999))
i am yolanda, age 18, money 9999999.999000
>
>>> print("i am {:s}, age {:d}, money {:f}".format(*["yolanda", 18, 9999999.999]))
i am yolanda, age 18, money 9999999.999000
>
>>> print("i am {name:s}, age {age:d}".format(name="yolanda", age=18))
i am yolanda, age 18
>
>>> print("i am {name:s}, age {age:d}".format({"name":"yolanda", age:18}))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
>
>>> print("i am {name:s}, age {age:d}".format({"name":"yolanda", "age":18}))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'name'
>
>>> print("i am {name:s}, age {age:d}".format(**{"name":"yolanda", "age":18}))
i am yolanda, age 18
>>>
>>>
>>> print("number: {:b},{:o},{:d},{:x},{:X},{:%}".format(10,10,10,10,10,18.8888,2))
number: 1010,12,10,a,A,1888.880000%
>>>
>>>
>>> print("number: {0:b},{0:o},{0:d},{0:x},{0:X},{0:%}".format(10,10,10,10,10,18.8888,2))
number: 1010,12,10,a,A,1000.000000%
>>> print("number: {0:b},{0:o},{0:d},{0:x},{0:X},{0:%}".format(8))
number: 1000,10,8,8,8,800.000000%
>>>
>>> print("number: {num:b},{num:o},{num:d},{num:x},{num:X},{num:%}".format(num=6))
number: 110,6,6,6,6,600.000000%
>>>
>>> print ("Name:%10s Age:%8d Height:%8.2f"%("yolanda",25,1.83))
Name:   yolanda Age:      25 Height:    1.83
>>>
>>> print ("Name:%-10s Age:%-8d Height:%-8.2f"%("yolanda",25,1.83))
Name:yolanda    Age:25       Height:1.83
>>>
>>> print ("Name:%-10s Age:%08d Height:%08.2f"%("yolanda",25,1.83))
Name:yolanda    Age:00000025 Height:00001.83
>>>
>#使用format單獨對資料進行格式化
>>> format(0.0015,'.2e')
'1.50e-03'
>>>
>>> a = 0.035
>>> b = format(a, '.2%')
>>> b
'3.50%'
>>> 
>#其它的格式使用方法類似,不再一一演示
>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69942496/viewspace-2654894/,如需轉載,請註明出處,否則將追究法律責任。

相關文章