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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...