Python 字元串格式化操作 - format方法

来源:https://www.cnblogs.com/ievjai/archive/2020/02/14/12309418.html
-Advertisement-
Play Games

建議使用format()方法 字元串操作 對於 , 官方以及給出這種格式化操作已經過時,在 的未來版本中可能會消失。 在新代碼中使用新的字元串格式。因此推薦大家使用 來替換 %. format 方法系統複雜變數替換和格式化的能力,因此接下來看看都有哪些用法。 format() 這個方法是來自 模塊的 ...


建議使用format()方法

字元串操作 對於 %, 官方以及給出這種格式化操作已經過時,在 Python 的未來版本中可能會消失。 在新代碼中使用新的字元串格式。因此推薦大家使用format()來替換 %.

format 方法系統複雜變數替換和格式化的能力,因此接下來看看都有哪些用法。

format()

這個方法是來自 string 模塊的Formatter類裡面的一個方法,屬於一個內置方法。因此可以在屬於 string 對象的範疇都可以調用這個方法。

語法結構

這個方法太強大了,官方的用戶是。

replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
arg_name          ::=  [identifier | integer]
attribute_name    ::=  identifier
element_index     ::=  integer | index_string
index_string      ::=  <any source character except "]"> +
conversion        ::=  "r" | "s" | "a"
format_spec       ::=  <described in the next section>

針對 format_spec 的用法如下

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill        ::=  <a character other than '}'>
align       ::=  "<" | ">" | "=" | "^"
sign        ::=  "+" | "-" | " "
width       ::=  integer
precision   ::=  integer
type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

說明:

  • < 強制欄位在可用空間內左對齊
  • > 強制欄位在可用空間內右對齊
  • = 填充位於符號(如果有的話)之後,但位於數字之前
  • ^ 強制場位於可用空間的中心

常用的方法有下麵幾個,format()方法中<模板字元串>的槽除了包括參數序號,還可以包括格式控制信息。此時,槽的內部樣式如下:

{<參數序號>: <格式控制標記>}

"{" [[identifier | integer]("." identifier | "[" integer | index_string "]")*]["!" "r" | "s" | "a"] [":" format_spec] "}"

其中,<格式控制標記>用來控制參數顯示時的格式,包括:<填充><對齊><寬度>,<.精度><類型>6 個欄位,這些欄位都是可選的,可以組合使用,逐一介紹如下。

常用表達

  • 指定位置
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c')  # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc')      # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' indices can be repeated
'abracadabra'

如果要顯示 { }

>>> '{{}}, {}, {}'.format('b', 'c')
'{}, b, c'
  • 指定名稱
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'
  • 指定屬性
    對於複數來說,有2個屬性。如果不知道屬性具體名字是什麼,可以用dir來查看。
>>> c = 3-5j
>>> dir(c)
[....... 'imag', 'real']
>>> ('The complex number {0} is formed from the real part {0.real} '
...  'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
...     def __init__(self, x, y):
...         self.x, self.y = x, y
...     def __str__(self):
...         return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'
  • 訪問數組之類
>>> coord = (3, 5)
>>> 'X: {0[0]};  Y: {0[1]}'.format(coord)
'X: 3;  Y: 5'
  • !s 區別 !r
>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"
  • 文本對齊

下麵文本居中和左有對齊

>>> '{:<30}'.format('left aligned')
'left aligned                  '
>>> '{:>30}'.format('right aligned')
'                 right aligned'
>>> '{:^30}'.format('centered')
'           centered           '
>>> '{:*^30}'.format('centered')  # use '*' as a fill char
'***********centered***********'
  • 指定類型

b: 輸出整數的二進位方式;
c: 輸出整數對應的 Unicode 字元;
d: 輸出整數的十進位方式;
o: 輸出整數的八進位方式;
x: 輸出整數的小寫十六進位方式;
X: 輸出整數的大寫十六進位方式;

>>> '{:+f}; {:+f}'.format(3.14, -3.14)  # show it always
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14)  # show a space for positive numbers
' 3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14)  # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'
  • 逗號作為數千個分隔符:
>>> '{:,}'.format(1234567890)
'1,234,567,890'
  • 表示百分比
>>> 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'

騷操作

可以用來輸出一個表格,有點類似三方庫prettytable的效果

>>> width = 5
>>> for num in range(5,12):
...     for base in 'dXob': # 分別為10/16/8/2進位
...         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

高級用法 - 模板字元串

如果你是一個看Python語言工具的源碼的話,會發現這麼一個用法 - 模板字元串,比如robot裡面__init__.py裡面就有這麼一個用法。先看例子

from string import Template

errorMessageTemplate = Template("""$reason
RIDE depends on wx (wxPython). .....""")

....

print(errorMessageTemplate.substitute(reason="wxPython not found."))

如果是有問題就會列印

wxPython not found.
RIDE depends on wx (wxPython). .....

首先要導入模板Template,看看裡面有哪些屬性

>>> from string import Template as t
>>> dir(t)
[.....'braceidpattern', 'delimiter', 'flags', 'idpattern', 'pattern', 'safe_substitute', 'substitute']

>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'


>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
[...]
ValueError: Invalid placeholder in string: line 1, col 10


>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
[...]
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'

相關閱讀

https://stackoverflow.com/questions/5082452/string-formatting-vs-format

https://www.python.org/dev/peps/pep-3101

https://blog.csdn.net/i_chaoren/article/details/77922939

https://docs.python.org/release/3.1.5/library/stdtypes.html#old-string-formatting-operations

https://docs.python.org/release/3.1.5/library/string.html#string-formatting

看完了是不是對 format 已經有很深的認識了吧。趕緊動起來,實踐一下。

Hi,Sup,如果覺得我寫的不錯,不妨幫個忙

1、可以關註我的公眾號「程式員匯聚地」,每天分享互聯網前沿技術,讓你的瑣碎時間不在無聊,聽說關註了的人越來越優秀。

2、順手點個贊唄,可以讓更多的人看到這篇文章,順便激勵下我,嘻嘻。
在這裡插入圖片描述


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 歡迎訪問我的 "博客" 和 "github" ! go 語言學習筆記第一彈,來自 "gotour" ,以後要常寫筆記,把自己學習筆記記錄下來,就算只是筆記也要多寫。 好記性不如爛筆頭,也要多鍛煉自己的寫作能力。 說實話,今天很累了,最近在折騰操作系統內核,因為原先寫了個bootloader,現在想要 ...
  • JavaSE學習筆記(14) File類和IO流(位元組流和字元流) File類 概述 類是文件和目錄路徑名的抽象表示,主要用於文件和目錄的創建、查找和刪除等操作。 構造方法 :通過將給定的 路徑名字元串 轉換為抽象路徑名來創建新的 File實例。 :從 父路徑名字元串和子路徑名字元串 創建新的 Fi ...
  • 開發環境: Windows操作系統開發工具:Myeclipse+Jdk+Tomcat+mysql資料庫運行效果圖 源碼及原文鏈接:http://javadao.xyz/forum.php?mod=viewthread&tid=34 ...
  • JavaSE學習筆記(13) 線程池、Lambda表達式 1、等待喚醒機制 線程間通信 概念: 多個線程在處理同一個資源,但是處理的動作(線程的任務)卻不相同。 比如:線程A用來生成包子的,線程B用來吃包子的,包子可以理解為同一資源,線程A與線程B處理的動作,一個是生產,一個是消費,那麼線程A與線程 ...
  • 本人淺析傳統IT系統層面的系統監控,不涉及k8s以及Service Mesh,拋磚引玉。 隨著系統增多,我們需要一套能夠立體化監控系統去監控你的應用及業務,出現問題能夠及時告警,或通過大屏、簡訊和郵件。 我個人認為監控應該從三個方面進行入手,即:Metrics、Logging、Tracing。 Me ...
  • 今日內容 複習 內容詳細 1.Python入門 1.1 環境的搭建 mac系統上搭建python環境。 環境變數的作用:方便在命令行(終端)執行可執行程式,將可執行程式所在的目錄添加到環境變數,那麼以後無需再輸入路徑。 1.2 變數命名 變數 全局變數 函數 常量 1.3 運算符 is和==的區別? ...
  • 什麼是數據結構? 線性表 數組 動態數組設計 項目結構 代碼實現 CybArrayList.java package com.cyb; /** * 自定義ArrayList數組 * * @author chenyanbin * */ public class CybArrayList { /** * ...
  • 詳細代碼在文章底部 目錄 "基礎概念" "進程與線程" "單線程與多線程" "實現線程的4中方式" "thread.start()和runnable.run()的區別" 和runnable.run()的區別) "Thread和Runnable的異同" "線程的基本操作" "線程的優先順序與守護線程" ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...