日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:string—-常見的字符串操作

string —- 常見的字符串操作

源代碼: Lib/string.py

成都創(chuàng)新互聯(lián)是一家專業(yè)提供永寧企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、做網(wǎng)站、HTML5建站、小程序制作等業(yè)務(wù)。10年已為永寧眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。


參見

文本序列類型 —- str

字符串的方法

字符串常量

此模塊中定義的常量為:

string.ascii_letters

下文所述 ascii_lowercase 和 ascii_uppercase 常量的拼連。 該值不依賴于語言區(qū)域。

string.ascii_lowercase

小寫字母 'abcdefghijklmnopqrstuvwxyz'。 該值不依賴于語言區(qū)域,不會(huì)發(fā)生改變。

string.ascii_uppercase

大寫字母 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。 該值不依賴于語言區(qū)域,不會(huì)發(fā)生改變。

string.digits

字符串 '0123456789'。

string.hexdigits

字符串 '0123456789abcdefABCDEF'。

string.octdigits

字符串 '01234567'。

string.punctuation

由在 C 區(qū)域設(shè)置中被視為標(biāo)點(diǎn)符號(hào)的 ASCII 字符所組成的字符串: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.

string.printable

由被視為可打印符號(hào)的 ASCII 字符組成的字符串。 這是 digits, ascii_letters, punctuation 和 whitespace 的總和。

string.whitespace

由被視為空白符號(hào)的 ASCII 字符組成的字符串。 其中包括空格、制表、換行、回車、進(jìn)紙和縱向制表符。

自定義字符串格式化

內(nèi)置的字符串類提供了通過使用 PEP 3101 所描述的 format() 方法進(jìn)行復(fù)雜變量替換和值格式化的能力。 string 模塊中的 Formatter 類允許你使用與內(nèi)置 format() 方法相同的實(shí)現(xiàn)來創(chuàng)建并定制你自己的字符串格式化行為。

class string.Formatter

Formatter 類包含下列公有方法:

  • format(format_string, /, \args, **kwargs*)

    首要的 API 方法。 它接受一個(gè)格式字符串和任意一組位置和關(guān)鍵字參數(shù)。 它只是一個(gè)調(diào)用 vformat() 的包裝器。

    在 3.7 版更改: 格式字符串參數(shù)現(xiàn)在是 僅限位置參數(shù)。

  • vformat(format_string, args, kwargs)

    此函數(shù)執(zhí)行實(shí)際的格式化操作。 它被公開為一個(gè)單獨(dú)的函數(shù),用于需要傳入一個(gè)預(yù)定義字母作為參數(shù),而不是使用 *args**kwargs 語法將字典解包為多個(gè)單獨(dú)參數(shù)并重打包的情況。 vformat() 完成將格式字符串分解為字符數(shù)據(jù)和替換字段的工作。 它會(huì)調(diào)用下文所述的幾種不同方法。

此外,F(xiàn)ormatter 還定義了一些旨在被子類替換的方法:

  • parse(format_string)

    循環(huán)遍歷 format_string 并返回一個(gè)由可迭代對(duì)象組成的元組 (literal_text, field_name, format_spec, conversion)。 它會(huì)被 vformat() 用來將字符串分解為文本字面值或替換字段。

    元組中的值在概念上表示一段字面文本加上一個(gè)替換字段。 如果沒有字面文本(如果連續(xù)出現(xiàn)兩個(gè)替換字段就會(huì)發(fā)生這種情況),則 literal_text 將是一個(gè)長度為零的字符串。 如果沒有替換字段,則 field_name, format_specconversion 的值將為 None。

  • get_field(field_name, args, kwargs)

    給定 field_name 作為 parse() (見上文) 的返回值,將其轉(zhuǎn)換為要格式化的對(duì)象。 返回一個(gè)元組 (obj, used_key)。 默認(rèn)版本接受在 PEP 3101 所定義形式的字符串,例如 “0[name]“ 或 “l(fā)abel.title”。 argskwargs 與傳給 vformat() 的一樣。 返回值 used_key 與 get_value() 的 key 形參具有相同的含義。

  • get_value(key, args, kwargs)

    提取給定的字段值。 key 參數(shù)將為整數(shù)或字符串。 如果是整數(shù),它表示 args 中位置參數(shù)的索引;如果是字符串,它表示 kwargs 中的關(guān)鍵字參數(shù)名。

    args 形參會(huì)被設(shè)為 vformat() 的位置參數(shù)列表,而 kwargs 形參會(huì)被設(shè)為由關(guān)鍵字參數(shù)組成的字典。

    對(duì)于復(fù)合字段名稱,僅會(huì)為字段名稱的第一個(gè)組件調(diào)用這些函數(shù);后續(xù)組件會(huì)通過普通屬性和索引操作來進(jìn)行處理。

    因此舉例來說,字段表達(dá)式 ‘0.name’ 將導(dǎo)致調(diào)用 get_value() 時(shí)附帶 key 參數(shù)值 0。 在 get_value() 通過調(diào)用內(nèi)置的 getattr() 函數(shù)返回后將會(huì)查找 name 屬性。

    如果索引或關(guān)鍵字引用了一個(gè)不存在的項(xiàng),則將引發(fā) IndexError 或 KeyError。

  • check_unused_args(used_args, args, kwargs)

    在必要時(shí)實(shí)現(xiàn)對(duì)未使用參數(shù)進(jìn)行檢測(cè)。 此函數(shù)的參數(shù)是是格式字符串中實(shí)際引用的所有參數(shù)鍵的集合(整數(shù)表示位置參數(shù),字符串表示名稱參數(shù)),以及被傳給 vformat 的 argskwargs 的引用。 未使用參數(shù)的集合可以根據(jù)這些形參計(jì)算出來。 如果檢測(cè)失敗則 check_unused_args() 應(yīng)會(huì)引發(fā)一個(gè)異常。

  • format_field(value, format_spec)

    format_field() 會(huì)簡單地調(diào)用內(nèi)置全局函數(shù) format()。 提供該方法是為了讓子類能夠重載它。

  • convert_field(value, conversion)

    使用給定的轉(zhuǎn)換類型(來自 parse() 方法所返回的元組)來轉(zhuǎn)換(由 get_field() 所返回的)值。 默認(rèn)版本支持 ‘s’ (str), ‘r’ (repr) 和 ‘a(chǎn)’ (ascii) 等轉(zhuǎn)換類型。

格式字符串語法

str.format() 方法和 Formatter 類共享相同的格式字符串語法(雖然對(duì)于 Formatter 來說,其子類可以定義它們自己的格式字符串語法)。 具體語法與 格式化字符串字面值 相似,但較為簡單一些,并且關(guān)鍵的一點(diǎn)是不支持任意表達(dá)式。

格式字符串包含有以花括號(hào) {} 括起來的“替換字段”。 不在花括號(hào)之內(nèi)的內(nèi)容被視為字面文本,會(huì)不加修改地復(fù)制到輸出中。 如果你需要在字面文本中包含花括號(hào)字符,可以通過重復(fù)來轉(zhuǎn)義: {{ and }}。

替換字段的語法如下:

  
  
  
  
  1. replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
  2. field_name ::= arg_name ("." attribute_name | "[" element_index "]")*
  3. arg_name ::= [identifier | digit+]
  4. attribute_name ::= identifier
  5. element_index ::= digit+ | index_string
  6. index_string ::= +
  7. conversion ::= "r" | "s" | "a"
  8. format_spec ::=

用不太正式的術(shù)語來描述,替換字段開頭可以用一個(gè) field_name 指定要對(duì)值進(jìn)行格式化并取代替換字符被插入到輸出結(jié)果的對(duì)象。 field_name 之后有可選的 conversion 字段,它是一個(gè)感嘆號(hào) '!' 加一個(gè) format_spec,并以一個(gè)冒號(hào) ':' 打頭。 這些指明了替換值的非默認(rèn)格式。

另請(qǐng)參閱 格式規(guī)格迷你語言 一節(jié)。

field_name 本身以一個(gè)數(shù)字或關(guān)鍵字 arg_name 打頭。 如果為數(shù)字,則它指向一個(gè)位置參數(shù),而如果為關(guān)鍵字,則它指向一個(gè)命名關(guān)鍵字參數(shù)。 如果格式字符串中的數(shù)字 arg_names 為 0, 1, 2, … 的序列,它們可以全部省略(而非部分省略),數(shù)字 0, 1, 2, … 將會(huì)按順序自動(dòng)插入。 由于 arg_name 不使用引號(hào)分隔,因此無法在格式字符串中指定任意的字典鍵 (例如字符串 '10'':-]')。 arg_name 之后可以帶上任意數(shù)量的索引或?qū)傩员磉_(dá)式。 '.name' 形式的表達(dá)式會(huì)使用 getattr() 選擇命名屬性,而 '[index]' 形式的表達(dá)式會(huì)使用 __getitem__() 執(zhí)行索引查找。

在 3.1 版更改: 位置參數(shù)說明符對(duì)于 str.format() 可以省略,因此 '{} {}'.format(a, b) 等價(jià)于 '{0} {1}'.format(a, b)

在 3.4 版更改: 位置參數(shù)說明符對(duì)于 Formatter 可以省略。

一些簡單的格式字符串示例

 
 
 
 
  1. "First, thou shalt count to {0}" # References first positional argument
  2. "Bring me a {}" # Implicitly references the first positional argument
  3. "From {} to {}" # Same as "From {0} to {1}"
  4. "My quest is {name}" # References keyword argument 'name'
  5. "Weight in tons {0.weight}" # 'weight' attribute of first positional arg
  6. "Units destroyed: {players[0]}" # First element of keyword argument 'players'.

使用 conversion 字段在格式化之前進(jìn)行類型強(qiáng)制轉(zhuǎn)換。 通常,格式化值的工作由值本身的 __format__() 方法來完成。 但是,在某些情況下最好強(qiáng)制將類型格式化為一個(gè)字符串,覆蓋其本身的格式化定義。 通過在調(diào)用 __format__() 之前將值轉(zhuǎn)換為字符串,可以繞過正常的格式化邏輯。

目前支持的轉(zhuǎn)換旗標(biāo)有三種: '!s' 會(huì)對(duì)值調(diào)用 str(),'!r' 調(diào)用 repr() 而 '!a' 則調(diào)用 ascii()。

示例如下:

 
 
 
 
  1. "Harold's a clever {0!s}" # Calls str() on the argument first
  2. "Bring out the holy {name!r}" # Calls repr() on the argument first
  3. "More {!a}" # Calls ascii() on the argument first

format_spec 字段包含值應(yīng)如何呈現(xiàn)的規(guī)格描述,例如字段寬度、對(duì)齊、填充、小數(shù)精度等細(xì)節(jié)信息。 每種值類型可以定義自己的“格式化迷你語言”或?qū)?format_spec 的解讀方式。

大多數(shù)內(nèi)置類型都支持同樣的格式化迷你語言,具體描述見下一節(jié)。

format_spec 字段還可以在其內(nèi)部包含嵌套的替換字段。 這些嵌套的替換字段可能包括字段名稱、轉(zhuǎn)換旗標(biāo)和格式規(guī)格描述,但是不再允許更深層的嵌套。 format_spec 內(nèi)部的替換字段會(huì)在解讀 format_spec 字符串之前先被解讀。 這將允許動(dòng)態(tài)地指定特定值的格式。

請(qǐng)參閱 格式示例 一節(jié)查看相關(guān)示例。

格式規(guī)格迷你語言

“格式規(guī)格”在格式字符串所包含的替換字段內(nèi)部使用,用于定義單個(gè)值應(yīng)如何呈現(xiàn) (參見 格式字符串語法 和 格式字符串字面值)。 它們也可以被直接傳給內(nèi)置的 format() 函數(shù)。 每種可格式化的類型都可以自行定義如何對(duì)格式規(guī)格進(jìn)行解讀。

大多數(shù)內(nèi)置類型都為格式規(guī)格實(shí)現(xiàn)了下列選項(xiàng),不過某些格式化選項(xiàng)只被數(shù)值類型所支持。

一般約定空的格式描述將產(chǎn)生與在值上調(diào)用 str() 相同的結(jié)果。 非空格式描述通常會(huì)修改此結(jié)果。

標(biāo)準(zhǔn)格式說明符 的一般形式如下:

 
 
 
 
  1. format_spec ::= [[fill]align][sign][z][#][0][width][grouping_option][.precision][type]
  2. fill ::=
  3. align ::= "<" | ">" | "=" | "^"
  4. sign ::= "+" | "-" | " "
  5. width ::= digit+
  6. grouping_option ::= "_" | ","
  7. precision ::= digit+
  8. type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

如果指定了一個(gè)有效的 align 值,則可以在該值前面加一個(gè) fill 字符,它可以為任意字符,如果省略則默認(rèn)為空格符。 在 格式化字符串字面值 或在使用 str.format() 方法時(shí)是無法使用花括號(hào)字面值 (“{“ or “}“) 作為 fill 字符的。 但是,通過嵌套替換字段插入花括號(hào)則是可以的。 這個(gè)限制不會(huì)影響 format() 函數(shù)。

各種對(duì)齊選項(xiàng)的含義如下:

選項(xiàng)

含意

‘<’

強(qiáng)制字段在可用空間內(nèi)左對(duì)齊(這是大多數(shù)對(duì)象的默認(rèn)值)。

‘>’

強(qiáng)制字段在可用空間內(nèi)右對(duì)齊(這是數(shù)字的默認(rèn)值)。

‘=’

強(qiáng)制在符號(hào)(如果有)之后數(shù)碼之前放置填充。 這被用于以 ‘+000000120’ 形式打印字段。 這個(gè)對(duì)齊選項(xiàng)僅對(duì)數(shù)字類型有效。 這是當(dāng) ‘0’ 緊接在字段寬度之前時(shí)的默認(rèn)選項(xiàng)。

‘^’

強(qiáng)制字段在可用空間內(nèi)居中。

請(qǐng)注意,除非定義了最小字段寬度,否則字段寬度將始終與填充它的數(shù)據(jù)大小相同,因此在這種情況下,對(duì)齊選項(xiàng)沒有意義。

sign 選項(xiàng)僅對(duì)數(shù)字類型有效,可以是以下之一:

選項(xiàng)

含意

‘+’

表示標(biāo)志應(yīng)該用于正數(shù)和負(fù)數(shù)。

‘-‘

表示標(biāo)志應(yīng)僅用于負(fù)數(shù)(這是默認(rèn)行為)。

space

表示應(yīng)在正數(shù)上使用前導(dǎo)空格,在負(fù)數(shù)上使用減號(hào)。

The 'z' option coerces negative zero floating-point values to positive zero after rounding to the format precision. This option is only valid for floating-point presentation types.

在 3.11 版更改: Added the 'z' option (see also PEP 682).

'#' 選項(xiàng)可讓“替代形式”被用于執(zhí)行轉(zhuǎn)換。 替代形式會(huì)針對(duì)不同的類型分別定義。 此選項(xiàng)僅適用于整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)類型。 對(duì)于整數(shù)類型,當(dāng)使用二進(jìn)制、八進(jìn)制或十六進(jìn)制輸出時(shí),此選項(xiàng)會(huì)為輸出值分別添加相應(yīng)的 '0b', '0o', '0x''0X' 前綴。 對(duì)于浮點(diǎn)數(shù)和復(fù)數(shù)類型,替代形式會(huì)使得轉(zhuǎn)換結(jié)果總是包含小數(shù)點(diǎn)符號(hào),即使其不帶小數(shù)部分。 通常只有在帶有小數(shù)部分的情況下,此類轉(zhuǎn)換的結(jié)果中才會(huì)出現(xiàn)小數(shù)點(diǎn)符號(hào)。 此外,對(duì)于 'g''G' 轉(zhuǎn)換,末尾的零不會(huì)從結(jié)果中被移除。

',' 選項(xiàng)表示使用逗號(hào)作為千位分隔符。 對(duì)于感應(yīng)區(qū)域設(shè)置的分隔符,請(qǐng)改用 'n' 整數(shù)表示類型。

在 3.1 版更改: 添加了 ',' 選項(xiàng) (另請(qǐng)參閱 PEP 378)。

'_' 選項(xiàng)表示對(duì)浮點(diǎn)表示類型和整數(shù)表示類型 'd' 使用下劃線作為千位分隔符。 對(duì)于整數(shù)表示類型 'b', 'o', 'x''X',將為每 4 個(gè)數(shù)位插入一個(gè)下劃線。 對(duì)于其他表示類型指定此選項(xiàng)則將導(dǎo)致錯(cuò)誤。

在 3.6 版更改: 添加了 '_' 選項(xiàng) (另請(qǐng)參閱 PEP 515)。

width 是一個(gè)定義最小總字段寬度的十進(jìn)制整數(shù),包括任何前綴、分隔符和其他格式化字符。 如果未指定,則字段寬度將由內(nèi)容確定。

當(dāng)未顯式給出對(duì)齊方式時(shí),在 width 字段前加一個(gè)零 ('0') 字段將為數(shù)字類型啟用感知正負(fù)號(hào)的零填充。 這相當(dāng)于設(shè)置 fill 字符為 '0'alignment 類型為 '='

在 3.10 版更改: 在 width 字段之前添加 '0' 不會(huì)再影響字符串的默認(rèn)對(duì)齊。

precision 是一個(gè)十進(jìn)制整數(shù),它表示對(duì)于以表示類型 'f''F' 格式化的數(shù)值應(yīng)當(dāng)在小數(shù)點(diǎn)后顯示多少個(gè)數(shù)位,或者對(duì)于以表示類型 'g''G' 格式化的數(shù)值應(yīng)當(dāng)在小數(shù)點(diǎn)前后顯示多少個(gè)數(shù)位。 對(duì)于字符串表示類型,該字段表示最大的字段大小 ——換句話說,就是要使用多少個(gè)來自字段內(nèi)容的字符。 precision 對(duì)于整數(shù)表示類型是不允許使用的。

最后,type 確定了數(shù)據(jù)應(yīng)如何呈現(xiàn)。

可用的字符串表示類型是:

類型

含意

‘s’

字符串格式。這是字符串的默認(rèn)類型,可以省略。

None

‘s’ 一樣。

可用的整數(shù)表示類型是:

類型

含意

‘b’

二進(jìn)制格式。 輸出以 2 為基數(shù)的數(shù)字。

‘c’

字符。在打印之前將整數(shù)轉(zhuǎn)換為相應(yīng)的unicode字符。

‘d’

十進(jìn)制整數(shù)。 輸出以 10 為基數(shù)的數(shù)字。

‘o’

八進(jìn)制格式。 輸出以 8 為基數(shù)的數(shù)字。

‘x’

十六進(jìn)制格式。 輸出以 16 為基數(shù)的數(shù)字,使用小寫字母表示 9 以上的數(shù)碼。

‘X’

十六進(jìn)制格式。 輸出以 16 為基數(shù)的數(shù)字,使用大寫字母表示 9 以上的數(shù)碼。 在指定 ‘#’ 的情況下,前綴 ‘0x’ 也將被轉(zhuǎn)為大寫形式 ‘0X’

‘n’

數(shù)字。 這與 ‘d’ 相似,不同之處在于它會(huì)使用當(dāng)前區(qū)域設(shè)置來插入適當(dāng)?shù)臄?shù)字分隔字符。

None

‘d’ 相同。

在上述的表示類型之外,整數(shù)還可以通過下列的浮點(diǎn)表示類型來格式化 (除了 'n'None)。 當(dāng)這樣做時(shí),會(huì)在格式化之前使用 float() 將整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)。

float 和 Decimal 值的可用表示類型有:

類型

含意

‘e’

科學(xué)計(jì)數(shù)法。 對(duì)于一個(gè)給定的精度 p,將數(shù)字格式化為以字母 ‘e’ 分隔系數(shù)和指數(shù)的科學(xué)計(jì)數(shù)法形式。 系數(shù)在小數(shù)點(diǎn)之前有一位,之后有 p 位,總計(jì) p + 1 個(gè)有效數(shù)位。 如未指定精度,則會(huì)對(duì) float 采用小數(shù)點(diǎn)之后 6 位精度,而對(duì) Decimal 則顯示所有系數(shù)位。 如果小數(shù)點(diǎn)之后沒有數(shù)位,則小數(shù)點(diǎn)也會(huì)被略去,除非使用了 # 選項(xiàng)。

‘E’

科學(xué)計(jì)數(shù)法。 與 ‘e’ 相似,不同之處在于它使用大寫字母 ‘E’ 作為分隔字符。

‘f’

定點(diǎn)表示法。 對(duì)于一個(gè)給定的精度 p,將數(shù)字格式化為在小數(shù)點(diǎn)之后恰好有 p 位的小數(shù)形式。 如未指定精度,則會(huì)對(duì) float 采用小數(shù)點(diǎn)之后 6 位精度,而對(duì) Decimal 則使用大到足夠顯示所有系數(shù)位的精度。 如果小數(shù)點(diǎn)之后沒有數(shù)位,則小數(shù)點(diǎn)也會(huì)被略去,除非使用了 # 選項(xiàng)。

‘F’

定點(diǎn)表示。 與 ‘f’ 相似,但會(huì)將 nan 轉(zhuǎn)為 NAN 并將 inf 轉(zhuǎn)為 INF。

‘g’

常規(guī)格式。 對(duì)于給定精度 p >= 1,這會(huì)將數(shù)值舍入到 p 個(gè)有效數(shù)位,再將結(jié)果以定點(diǎn)表示法或科學(xué)計(jì)數(shù)法進(jìn)行格式化,具體取決于其值的大小。 精度 0 會(huì)被視為等價(jià)于精度 1。

準(zhǔn)確的規(guī)則如下:假設(shè)使用表示類型 ‘e’ 和精度 p-1 進(jìn)行格式化的結(jié)果具有指數(shù)值 exp。 那么如果 m <= exp < p,其中 m 以 -4 表示浮點(diǎn)值而以 -6 表示 Decimal 值,該數(shù)字將使用類型 ‘f’ 和精度 p-1-exp 進(jìn)行格式化。 否則的話,該數(shù)字將使用表示類型 ‘e’ 和精度 p-1 進(jìn)行格式化。 在兩種情況下,都會(huì)從有效數(shù)字中移除無意義的末尾零,如果小數(shù)點(diǎn)之后沒有余下數(shù)字則小數(shù)點(diǎn)也會(huì)被移除,除非使用了 ‘#’ 選項(xiàng)。

如未指定精度,會(huì)對(duì) float 采用 6 個(gè)有效數(shù)位的精度。 對(duì)于 Decimal,結(jié)果的系數(shù)會(huì)沿用原值的系數(shù)數(shù)位;對(duì)于絕對(duì)值小于 1e-6 的值以及最小有效數(shù)位的位值大于 1 的數(shù)值將會(huì)使用科學(xué)計(jì)數(shù)法,在其他情況下則會(huì)使用定點(diǎn)表示法。

正負(fù)無窮,正負(fù)零和 nan 會(huì)分別被格式化為 inf, -inf, 0, -0nan,無論精度如何設(shè)定。

‘G’

常規(guī)格式。 類似于 ‘g’,不同之處在于當(dāng)數(shù)值非常大時(shí)會(huì)切換為 ‘E’。 無窮與 NaN 也會(huì)表示為大寫形式。

‘n’

數(shù)字。 這與 ‘g’ 相似,不同之處在于它會(huì)使用當(dāng)前區(qū)域設(shè)置來插入適當(dāng)?shù)臄?shù)字分隔字符。

‘%’

百分比。 將數(shù)字乘以 100 并顯示為定點(diǎn) (‘f’) 格式,后面帶一個(gè)百分號(hào)。

None

對(duì)于 float 來說這類似于 ‘g’,不同之處在于當(dāng)使用定點(diǎn)表示法時(shí),小數(shù)點(diǎn)之后將至少顯示一位。 所用的精度會(huì)大到足以精確表示給定的值。

對(duì)于 Decimal 來說這相當(dāng)于 ‘g’‘G’,具體取決于當(dāng)前 decimal 上下文的 context.capitals 值。

總體效果是將 str() 的輸出匹配為其他格式化因子所調(diào)整出的樣子。

格式示例

本節(jié)包含 str.format() 語法的示例以及與舊式 % 格式化的比較。

該語法在大多數(shù)情況下與舊式的 % 格式化類似,只是增加了 {}: 來取代 %。 例如,,'%03.2f' 可以被改寫為 '{:03.2f}'。

新的格式語法還支持新增的不同選項(xiàng),將在以下示例中說明。

按位置訪問參數(shù):

 
 
 
 
  1. >>> '{0}, {1}, {2}'.format('a', 'b', 'c')
  2. 'a, b, c'
  3. >>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only
  4. 'a, b, c'
  5. >>> '{2}, {1}, {0}'.format('a', 'b', 'c')
  6. 'c, b, a'
  7. >>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence
  8. 'c, b, a'
  9. >>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated
  10. 'abracadabra'

按名稱訪問參數(shù):

 
 
 
 
  1. >>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
  2. 'Coordinates: 37.24N, -115.81W'
  3. >>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
  4. >>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
  5. 'Coordinates: 37.24N, -115.81W'

訪問參數(shù)的屬性:

 
 
 
 
  1. >>> c = 3-5j
  2. >>> ('The complex number {0} is formed from the real part {0.real} '
  3. ... 'and the imaginary part {0.imag}.').format(c)
  4. 'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
  5. >>> class Point:
  6. ... def __init__(self, x, y):
  7. ... self.x, self.y = x, y
  8. ... def __str__(self):
  9. ... return 'Point({self.x}, {self.y})'.format(self=self)
  10. ...
  11. >>> str(Point(4, 2))
  12. 'Point(4, 2)'

訪問參數(shù)的項(xiàng):

 
 
 
 
  1. >>> coord = (3, 5)
  2. >>> 'X: {0[0]}; Y: {0[1]}'.format(coord)
  3. 'X: 3; Y: 5'

替代 %s%r:

 
 
 
 
  1. >>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
  2. "repr() shows quotes: 'test1'; str() doesn't: test2"

對(duì)齊文本以及指定寬度:

 
 
 
 
  1. >>> '{:<30}'.format('left aligned')
  2. 'left aligned '
  3. >>> '{:>30}'.format('right aligned')
  4. ' right aligned'
  5. >>> '{:^30}'.format('centered')
  6. ' centered '
  7. >>> '{:*^30}'.format('centered') # use '*' as a fill char
  8. '***********centered***********'

替代 %+f, %-f% f 以及指定正負(fù)號(hào):

 
 
 
 
  1. >>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always
  2. '+3.140000; -3.140000'
  3. >>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers
  4. ' 3.140000; -3.140000'
  5. >>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'
  6. '3.140000; -3.140000'

替代 %x%o 以及轉(zhuǎn)換基于不同進(jìn)位制的值:

 
 
 
 
  1. >>> # format also supports binary numbers
  2. >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
  3. 'int: 42; hex: 2a; oct: 52; bin: 101010'
  4. >>> # with 0x, 0o, or 0b as prefix:
  5. >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
  6. 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'

使用逗號(hào)作為千位分隔符:

 
 
 
 
  1. >>> '{:,}'.format(1234567890)
  2. '1,234,567,890'

表示為百分?jǐn)?shù):

 
 
 
 
  1. >>> points = 19
  2. >>> total = 22
  3. >>> 'Correct answers: {:.2%}'.format(points/total)
  4. 'Correct answers: 86.36%'

使用特定類型的專屬格式化:

 
 
 
 
  1. >>> import datetime
  2. >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
  3. >>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
  4. '2010-07-04 12:15:58'

嵌套參數(shù)以及更復(fù)雜的示例:

 
 
 
 
  1. >>> for align, text in zip('<^>', ['left', 'center', 'right']):
  2. ... '{0:{fill}{align}16}'.format(text, fill=align, align=align)
  3. ...
  4. 'left<<<<<<<<<<<<'
  5. '^^^^^center^^^^^'
  6. '>>>>>>>>>>>right'
  7. >>>
  8. >>> octets = [192, 168, 0, 1]
  9. >>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
  10. 'C0A80001'
  11. >>> int(_, 16)
  12. 3232235521
  13. >>>
  14. >>> width = 5
  15. >>> for num in range(5,12):
  16. ... for base in 'dXob':
  17. ... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
  18. ... print()
  19. ...
  20. 5 5 5 101
  21. 6 6 6 110
  22. 7 7 7 111
  23. 8 8 10 1000
  24. 9 9 11 1001
  25. 10 A 12 1010
  26. 11 B 13 1011

模板字符串

Template strings provide simpler string substitutions as described in PEP 292. A primary use case for template strings is for internationalization (i18n) since in that context, the simpler syntax and functionality makes it easier to translate than other built-in string formatting facilities in python. As an example of a library built on template strings for i18n, see the flufl.i18n package.

模板字符串支持基于 $ 的替換,使用以下規(guī)則:

  • $$ 為轉(zhuǎn)義符號(hào);它會(huì)被替換為單個(gè)的 $

  • $identifier 為替換占位符,它會(huì)匹配一個(gè)名為 "identifier" 的映射鍵。 在默認(rèn)情況下,"identifier" 限制為任意 ASCII 字母數(shù)字(包括下劃線)組成的字符串,不區(qū)分大小寫,以下劃線或 ASCII 字母開頭。 在 $ 字符之后的第一個(gè)非標(biāo)識(shí)符字符將表明占位符的終結(jié)。

  • ${identifier} 等價(jià)于 $identifier。 當(dāng)占位符之后緊跟著有效的但又不是占位符一部分的標(biāo)識(shí)符字符時(shí)需要使用,例如 "${noun}ification"。

在字符串的其他位置出現(xiàn) $ 將導(dǎo)致引發(fā) ValueError。

string 模塊提供了實(shí)現(xiàn)這些規(guī)則的 Template 類。 Template 有下列方法:

class string.Template(template)

該構(gòu)造器接受一個(gè)參數(shù)作為模板字符串。

  • substitute(mapping={}, /, \*kwds*)

    執(zhí)行模板替換,返回一個(gè)新字符串。 mapping 為任意字典類對(duì)象,其中的鍵將匹配模板中的占位符。 或者你也可以提供一組關(guān)鍵字參數(shù),其中的關(guān)鍵字即對(duì)應(yīng)占位符。 當(dāng)同時(shí)給出 mappingkwds 并且存在重復(fù)時(shí),則以 kwds 中的占位符為優(yōu)先。

  • safe_substitute(mapping={}, /, \*kwds*)

    類似于 substitute(),不同之處是如果有占位符未在 mappingkwds 中找到,不是引發(fā) KeyError 異常,而是將原始占位符不加修改地顯示在結(jié)果字符串中。 另一個(gè)與 substitute() 的差異是任何在其他情況下出現(xiàn)的 $ 將簡單地返回 $ 而不是引發(fā) ValueError。

    此方法被認(rèn)為“安全”,因?yàn)殡m然仍有可能發(fā)生其他異常,但它總是嘗試返回可用的字符串而不是引發(fā)一個(gè)異常。 從另一方面來說,safe_substitute() 也可能根本算不上安全,因?yàn)樗鼘㈧o默地忽略錯(cuò)誤格式的模板,例如包含多余的分隔符、不成對(duì)的花括號(hào)或不是合法 Python 標(biāo)識(shí)符的占位符等等。

  • is_valid()

    Returns false if the template has invalid placeholders that will cause substitute() to raise ValueError.

    3.11 新版功能.

  • get_identifiers()

    Returns a list of the valid identifiers in the template, in the order they first appear, ignoring any invalid identifiers.

    3.11 新版功能.

Template 的實(shí)例還提供一個(gè)公有數(shù)據(jù)屬性:

  • template

    這是作為構(gòu)造器的 template 參數(shù)被傳入的對(duì)象。 一般來說,你不應(yīng)該修改它,但并不強(qiáng)制要求只讀訪問。

以下是一個(gè)如何使用模版的示例:

 
 
 
 
  1. >>> from string import Template
  2. >>> s = Template('$who likes $what')
  3. >>> s.substitute(who='tim', what='kung pao')
  4. 'tim likes kung pao'
  5. >>> d = dict(who='tim')
  6. >>> Template('Give $who $100').substitute(d)
  7. Traceback (most recent call last):
  8. ...
  9. ValueError: Invalid placeholder in string: line 1, col 11
  10. >>> Template('$who likes $what').substitute(d)
  11. Traceback (most recent call last):
  12. ...
  13. KeyError: 'what'
  14. >>> Template('$who likes $what').safe_substitute(d)
  15. 'tim likes $what'

進(jìn)階用法:你可以派生 Template 的子類來自定義占位符語法、分隔符,或用于解析模板字符串的整個(gè)正則表達(dá)式。 為此目的,你可以重載這些類屬性:

  • delimiter — 這是用來表示占位符的起始的分隔符的字符串字面值。 默認(rèn)值為 $。 請(qǐng)注意此參數(shù) 不能 為正則表達(dá)式,因?yàn)槠鋵?shí)現(xiàn)將在必要時(shí)對(duì)此字符串調(diào)用 re.escape()。 還要注意你不能在創(chuàng)建類之后改變此分隔符(例如在子類的類命名空間中必須設(shè)置不同的分隔符)。

  • idpattern — 這是用來描述不帶花括號(hào)的占位符的模式的正則表達(dá)式。 默認(rèn)值為正則表達(dá)式 (?a:[_a-z][_a-z0-9]*)。 如果給出了此屬性并且 braceidpatternNone 則此模式也將作用于帶花括號(hào)的占位符。

    備注

    由于默認(rèn)的 flagsre.IGNORECASE,模式 [a-z] 可以匹配某些非 ASCII 字符。 因此我們?cè)谶@里使用了局部旗標(biāo) a。

    在 3.7 版更改: braceidpattern 可被用來定義對(duì)花括號(hào)內(nèi)部和外部進(jìn)行區(qū)分的模式。

  • braceidpattern — 此屬性類似于 idpattern 但是用來描述帶花括號(hào)的占位符的模式。 默認(rèn)值 None 意味著回退到 idpattern (即在花括號(hào)內(nèi)部和外部使用相同的模式)。 如果給出此屬性,這將允許你為帶花括號(hào)和不帶花括號(hào)的占位符定義不同的模式。

    3.7 新版功能.

  • flags — 將在編譯用于識(shí)別替換內(nèi)容的正則表達(dá)式被應(yīng)用的正則表達(dá)式旗標(biāo)。 默認(rèn)值為 re.IGNORECASE。 請(qǐng)注意 re.VERBOSE 總是會(huì)被加為旗標(biāo),因此自定義的 idpattern 必須遵循詳細(xì)正則表達(dá)式的約定。

    3.2 新版功能.

作為另一種選項(xiàng),你可以通過重載類屬性 pattern 來提供整個(gè)正則表達(dá)式模式。 如果你這樣做,該值必須為一個(gè)具有四個(gè)命名捕獲組的正則表達(dá)式對(duì)象。 這些捕獲組對(duì)應(yīng)于上面已經(jīng)給出的規(guī)則,以及無效占位符的規(guī)則:

  • escaped — 這個(gè)組匹配轉(zhuǎn)義序列,在默認(rèn)模式中即 $$。

  • named — 這個(gè)組匹配不帶花括號(hào)的占位符名稱;它不應(yīng)當(dāng)包含捕獲組中的分隔符。

  • braced — 這個(gè)組匹配帶有花括號(hào)的占位符名稱;它不應(yīng)當(dāng)包含捕獲組中的分隔符或者花括號(hào)。

  • invalid — 這個(gè)組匹配任何其他分隔符模式(通常為單個(gè)分隔符),并且它應(yīng)當(dāng)出現(xiàn)在正則表達(dá)式的末尾。

The methods on this class will raise ValueError if the pattern matches the template without one of these named groups matching.

輔助函數(shù)

string.capwords(s, sep=None)

使用 str.split() 將參數(shù)拆分為單詞,使用 str.capitalize() 將單詞轉(zhuǎn)為大寫形式,使用 str.join() 將大寫的單詞進(jìn)行拼接。 如果可選的第二個(gè)參數(shù) sep 被省略或?yàn)?None,則連續(xù)的空白字符會(huì)被替換為單個(gè)空格符并且開頭和末尾的空白字符會(huì)被移除,否則 sep 會(huì)被用來拆分和拼接單詞。


新聞標(biāo)題:創(chuàng)新互聯(lián)Python教程:string—-常見的字符串操作
網(wǎng)站URL:http://m.5511xx.com/article/cocehih.html