文數格式

文數格式指的是將文字字串和數字以指定的格式顯示出來, 例如:指定小數位數,加上千分位符號,...等。

設定格式的三個方法

Python設定文字數字格式,由舊而新,有以下三個方法:

方法一

%-formatting:使用 % (百分比)符號,在字串後面加上 % 符號,再加上指定參數。這個方法在 python 2.6 之前已被採用,但它可以接收的參數數量較受限制。這方法在 Python 3 仍然可以使用,但未來可能會被棄用,儘管沒有時間表。

pi = 3.14159
print(" pi = %1.2f " % pi)

s1 = "cats"
s2 = "dogs"
s3 = " %s and %s living together" % (s1, s2)
		

字串格式化

Python 支援格式化字串的輸出。 這樣可能會用較複雜的表達式,但可以使用的變化較多。最基本的用法是將一個值插入到一個有字串格式符號 %s 的字串中。 它的格式使用與 C 中sprintf 函數一樣的語法。

#!/usr/bin/python3
print ( " 我叫%s今年%d歲! " % ( '小明' , 10 ) )
			

以上範例輸出結果:

我叫小明今年10歲!
			

字串格式化符號

符號 描述
      %c  格式化字符及其ASCII碼
      %s  格式化字串
      %d  格式化整數
      %u  格式化無符號整型
      %o  格式化無符號八進制數
      %x  格式化無符號十六進制數
      %X  格式化無符號十六進制數(大寫)
      %f  格式化浮點數字,可指定小數點後的精度
      %e  用科學計數法格式化浮點數
      %E  作用同%e,用科學計數法格式化浮點數
      %g  %f和%e的簡寫
      %G  %f 和%E 的簡寫
      %p  用十六進制數格式化變量的地址

格式化操作符輔助指令:

符號 功能
* 定義寬度或者小數點精度
- 用做左對齊
+ 在正數前面顯示加號( + )
<sp> 在正數前面顯示空格
# 在八進制數前面顯示零('0'),在十六進制前面顯示'0x'或者'0X'(取決於用的是'x'還是'X')
0 顯示的數字前面填充'0'而不是默認的空格
% '%%'輸出一個單一的'%'
(var) 映射變量(字典參數)
mn m 是顯示的最小總寬度,n 是小數點後的位數(如果可用的話)

方法二

Python2.6 開始,新增了一種格式化字串的函數str.format(),它增強了字串格式化的功能。

使用 str.format():這是目前較普遍使用的方法,可以設定整數和浮點數的格式,也可以適用到字串的顯示方式。

若要查看結果,可以使用以下的語法格式:

print("FORMAT".format(NUMBER));
			

例如:

print("{:.2f}".format(3.1415926));
			

使用format配置參數有三種方式

  1. 使用 {} - 依照順序配置
    txt1 = "My name is {}, I'm {}".format("John",36)
    
  2. 使用 {編號} - 編號由0開始,可以設定使用參數的順序
    txt2 = "My name is {0}, I'm {1}".format("John",36)
    
  3. 使用 {變數} - 設定使用參數的變數, format的參數中必須指定參數名稱
    txt3 = "My name is {fname}, I'm {age}".format(fname = "John", age = 36)
    			

參考資料

以下是數字格式常見的設定方法:

數字 格式 輸出 描述
3.1415926 {:.2f} 3.14 保留小數點後兩位
3.1415926 {:+.2f} +3.14 帶符號保留小數點後兩位
-1 {:+.2f} -1.00 帶符號保留小數點後兩位
2.71828 {:.0f} 3 不帶小數
5 {:0>2d} 05 數字補零 (填充左邊, 寬度為2)
5 {:x<4d} 5xxx 數字補x (填充右邊, 寬度為4)
10 {:x<4d} 10xx 數字補x (填充右邊, 寬度為4)
1000000 {:,} 1,000,000 以逗號分隔的數字格式
0.25 {:.2%} 25.00% 百分比格式
1000000000 {:.2e} 1.00e+09 指數記法
13 {:10d}         13 右對齊 (默認, 寬度為10)
13 {:<10d} 13 左對齊 (寬度為10)
13 {:^10d}     13 中間對齊 (寬度為10)

使用這個方法,也可以顯示不同的數字進位。例如:

'{:b}'.format(11)
'{:d}'.format(11)
'{:o}'.format(11)
'{:x}'.format(11)
'{:#x}'.format(11)
'{:#X}'.format(11)
			

結果為:

1011
11
13
b
0xb
0XB

格式用法說明:

: 號後面帶填充的字元,而且只能是一個字元,不指定則預設是用空格填充。

^, <, > 分別是居中、左對齊、右對齊,後面帶寬度。

+ 表示在正數前顯示 +,負數前顯示 -; (空格)表示在正數前加空格

b、d、o、x 分別是二進制、十進制、八進制、十六進制。

此外可以使用大括號 {} 來轉義大括號,如下實例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
print ("{} 對應的位置是 {{0}}".format("wenzao"))
			

輸出結果為:

wenzao 對應的位置是 {0}
			

參考資料

方法三

F-Strings:這個方法是在 Python 3.6 之後導入使用,方法是在字串的引號前面加上 f 字元(大小寫皆可),例如: f"string",這方法使用較簡短的語法,使它更容易使用並且可以用樣板型式。 這個方法與str.format()設定變數的方式很類似,在文字字串裡面加入 {變數} 作為格式化的依據,但功能更多:

實例 1

age = 24
name = "John"
print(f"{name} is {age} years old.")

# outputs: John is 24 years old.
			

實例 2.加上 = (等於)符號

book = "Lord of the Rings"
author = "J.R.R. Tolkien"
print( f"{book = } \n{author = }" )

# 執行結果
# book = 'Lord of the Rings' 
# author = 'J.R.R. Tolkien'

實例 3.設定大數字格式

number = 123454353453
print(f"The value of the company is {number:,d}")

# outputs: The value of the company is 123,454,353,453

實例 4.設定日期格式

from datetime import datetime
today = datetime.today().date()
print(f"Today is {today}")
print(f"Today is {today:%Y/%m/%d}")

# outputs: Today is 2021-09-07
# outputs: Today is 2021/09/07
			

實例 5.可以做數字計算,例如:

print( f"Do math: 3 * 6 = {3 * 6}" )

# outputs: Do math: 3 * 6 = 18

實例 6.可以呼叫函式,例如:

verb = "runs"
print( f"The girl {verb.upper()} quickly." )

# outputs: The girl RUNS quickly.
			

實例 7.可以填充數字,例如:

a = 4
b = 123
print(f"Product numbers are {a:03} and {b:03}")

# outputs: Product numbers are 004 and 123
			

實例 8.印出原始字串(!r)

aaa = "Hello \n World"
print(f'The welcome string is {aaa!r}')

# outputs: The welcome string is 'Hello \n World'
			

字串三種引用符號均可使用,例如,以下三個方法所得到的結果相同:

name = "Fred"
print( f'{name}' )
print( f"{name}" )
print( f"""{name}""" )

詳細設定參考