Python 學習筆記(6)— 字串格式化

__Light 發表於 2019-08-13

字串格式化處理

遠古寫法

以前通常使用運算子號 %%s 插入的值 String 型別,%.3f 指插入的值為包含 3 位小數的浮點數:

format1 = "%s, %s!" % ('Hello', 'World')
# 'Hello, World!'

關鍵字插入法:

temp = string.Template('I am $name, I like $what!;)
temp.substitute(name='Liang', what='Apple')
# 'I am Liang, I like Apple!' 

Python 3 推薦方法

新版本 Python 中,應選擇使用字串方法 format,每個替換欄位都用 {} 大括號(花括號)括起,括號內可留空或新增格式設定資訊:

  • 一般用法:
'I am {},I like {}'.format('Liang', 'Apple')
# 'I am Liang, I like Apple!' 

'I am {0},I like {1}'.format('Liang', 'Apple')
# 'I am Liang, I like Apple!' 
  • 索引也可無需像上面一樣順序排列,但注意不能同時使用自動索引和手工索引
'I am {1},I like {0}'.format('Apple', 'Liang')
# 'I am Liang, I like Apple!' 
  • 更可以像上面關鍵字插入法一樣,給每個替換欄位命名,名稱後面跟冒號可以設定格式:
'{name} is {value:.2f},'.format(name='π', value=pi)
# 'π is 3.14' 
  • 終極簡約寫法,在字串前面加上 f,便可直接將值或變數寫在大括號內:
f"{'π'} is {pi:.2f}"
# 'π is 3.14' 
  • 如果輸出結果中需要包含大括號,則可使用兩個大括號來指定:
"{{我需要使用{what}啊!}}".format(what='大括號')
# {我需要使用大括號啊!}
  • 關鍵字插入法可以和索引同時使用:
'{foo} {1} {bar} {0}'.format(1, 2, foo=3, bar=4)
# '3 1 2 4'

基本轉換

指定佔位符要轉換的型別;

例如,你可以提供一個整數,但將其作為小數進行處理:

num = 1024
f'The number is {num:f}'
# 'The number is 1024.000000'

亦或者將其作為二進位制處理:

num = 1024
f'The number is {num:b}'
# 'The number is 10000000000'

以下為字串格式設定型別說明符:

說明符 含義
b 將整數表示為二進位制
c 將整數解讀為Unicode碼點
d 將整數視為十進位制數進行處理,這是整數預設使用的說明符
e 使用科學表示法來表示小數(用 e 來表示指數)
E 與 e 相同,但使用 E 來表示指數
f 將小數表示為定點數
F 與 f 相同,但與特殊值(nan 和 inf),使用大寫表示
g 自動在定點表示法和科學表示法之間做選擇。這是預設用於小數的說明符,但在預設情況下至少有 1 位小數
G 與 g 相同,但使用大寫來表示指數和特殊值
n 與 g 相同,但插入隨區域而異的數字分隔符
o 將整數表示為八進位制數
s 保持字串的格式不變,這是預設用於字串的說明符
x 將整數表示為十六進位制數並使用小寫字母
X 與 X 相同,但使用大寫字母
% 將數表示為百分比值(乘以100,按說明符 f 的設定格式,再在後面加上 %)

寬度、精度和千位分隔符

在字串格式化處理是,不但可以轉換型別,還可以設定轉換欄位的寬度和精度;

寬度使用整數表示:

num = 1024
f'{num:10}'
# '      1024'

數字和字串的預設對齊方式不同:

num = '1024'
f'{num:10}'
# '1024      '

精度也是使用整數表示,但需要在整數前加上小數點:

num = 1024
f'{num:.2f}'
# '1024.00'

寬度可以和精度同時指定:

num = 1024
f'{num:10.2f}'
# '   1024.00'

字串型別也可以指定精度,但不推薦使用,使用切片處理則更好理解:

str = '今天天氣不錯~'
f'{str:.2}'
# '今天'

在冒號後面新增一個逗號可以為數值新增千位分隔符:

num = 10000000000000
f'{num:,}'
# '10,000,000,000,000'

填充、對齊與符號

在不新增對齊符號(使用預設對齊方式)的情況下,儘可以使用 0 進行有意義的填充操作:

num = 1024
f'{num:010}'
# '0000001024'

但是在新增了對齊符號之後,就可以在對齊符號前面任意新增一個字元表示填充字元了;

對齊符號:<(左對齊)、>(右對齊)、^(居中),寫在寬度之前:

num = 1024
f'{num:<10}'
'1024      '
f'{num:^10}'
'   1024   '
f'{num:>10}'
'      1024'

當替換欄位為數值時,可為替換欄位新增正負符號,

新增 + 符號時,加號寫在對齊符號之後,寬度整數之前;

新增 - 符號時,減號寫在替換欄位的之前;

可以理解為將替換欄位的數值乘以 +1(將 + 顯示)或 -1

num = 1024
f'{num:>+10}'
'     +1024'
f'{-num:>10}'
'     -1024'

如果需要為負數新增符號:

num = -1024
f'{num:>10}'
'     -1024'
f'{-num:>+10}'
'     +1024'

= 是一種新增了正負符號之後的另一種對齊符號(可以理解為 兩端對齊),作用是將填充字元放在符號和數字之間:

num = 1024
f'{num:=+10}'
'+     1024'
f'{-num:=10}'
'-     1024'

總結

'{[0]sum[1][2][3][4][5]}'

0:為替換欄位新增 - 符號(替換欄位須為數字且不為負數,因為負數無需再多此一舉);

1:為替換欄位指定寬度之後可以在此位置指定填充字元,預設為空格;

2:為替換欄位指定寬度之後可以在此位置指定對齊符號,<(左對齊) / ^(居中) / >(右對齊) / =(兩端對齊,只能用於型別為數值切有正負符號的替換欄位);

3:為替換欄位新增 + 符號(替換欄位須為數字);

4:指定替換欄位的寬度,只能填寫整數;

5:指定替換欄位的精度或轉換型別;


相關文章

求職面試常見問題:Python常見面試題全解析附答案 面試

求職面試常見問題:Python常見面試題全解析附答案

Python是個非常受歡迎的程式語言,隨著近些年機器學習、雲端計算等技術的發展,Python的職位需求越來越高。我收集了110道Python面試官經常問的問題,供大家參考學習。篇幅問題,分為2次推送,
剛出爐!年度榜單:Python三連冠,碾壓Java!你怎麼看? Java

剛出爐!年度榜單:Python三連冠,碾壓Java!你怎麼看?

新一年度的程式語言榜單來了,如果你每年都在看,會發現程式設計榜單跟娛樂圈的“金鷹節”一類的頒獎節目很像,有很多新秀獲獎得主,更會見證許多老牌“明星”的驀然暗淡,令人不勝唏噓。比如,曾被網友盛讚為“世界
天了嚕,居然用Python查到了女神的姓名

天了嚕,居然用Python查到了女神的姓名

目 標 場 景不知道你有沒有經歷過這樣一個場景,好不容易拿到一個妹子的手機號,但是又不好意思去搭訕,問一下對方的名字。有過社工科經驗的人應該都知道,拿到一個人的手機號碼後,其他資訊都可以很容易獲取到,
Python 執行 Linux 作業系統命令 Linux

Python 執行 Linux 作業系統命令

在開發運維指令碼過程中,經常需要執行一些作業系統命令,常用方法如下:1、使用 os.system&gt;&gt;&gt; import os&gt;&gt;&gt; cmd = 'ls /'&gt;&
從招聘網看Python就業前景

從招聘網看Python就業前景

1.資料採集事情的起源是這樣的,某個風和日麗的下午… 習慣性的開啟知乎準備劃下水,看到一個問題剛好邀請回答於是就萌生了採集下某招聘網站Python崗位招聘的資訊,看一下目前的薪水和崗位分佈,說幹就幹。
小白學python遇到問題了.......

小白學python遇到問題了.......

使用的書是《python程式設計 從入門到實踐》作者:Eric Matthes學到第十二章外星人入侵時。安裝pygame依賴的庫時,發現庫似乎不起作用。我把程式碼寫出來執行之後只有一個框,裡面沒有任何
我用Python程式語言做了一些神奇好玩的事情 程式語言

我用Python程式語言做了一些神奇好玩的事情

其實Python真的挺有意思的,用Python用做過不少有趣好玩的事兒,這裡跟大家分享幾個我做的好玩的東西。好玩的事1:用微信控制燈泡搞個微信公眾號,設定把請求轉發到你自己的公眾號伺服器。公眾號伺服器
python + flask 開發的微信公眾號和文章管理系統 Flask

python + flask 開發的微信公眾號和文章管理系統

體驗地址http://py.xiangxueweilai.com/user/login賬號:admin 密碼:123456作者微信:17703212695歡迎大家點評!
用 Python 入門資料科學

用 Python 入門資料科學

使用 Python 開展資料科學為你提供了無限的潛力,使你能夠以有意義和啟發性的方式解析、解釋和組織資料。資料科學是計算領域一個令人興奮的新領域,它圍繞分析、視覺化和關聯以解釋我們的計算機收集的有關世
Python之 常用查詢演算法:最小項搜尋、順序搜尋、二分搜尋 演算法

Python之 常用查詢演算法:最小項搜尋、順序搜尋、二分搜尋

最小項搜尋  def min_search(items):  """  最小項搜尋  :param items:  :return:  """  min_index = 0  for i in ran
大話 python 之鴨子

大話 python 之鴨子

python膠水用多了難免沾手,會帶來一些鴨子特性(行為表現像鴨子,認為它就是鴨子)。本文旨在講述,python一些不為人知的鴨子性,比如泛型函式,可呼叫類.... 。python相信函式,本身將裝飾
python 詳解re模組

python 詳解re模組

正規表示式的元字元有. ^ $ * ? { [ ] | ( ).表示任意字元[]用來匹配一個指定的字元類別,所謂的字元類別就是你想匹配的一個字符集,對於字符集中的字元可以理解成或的關係。^ 如果放在字