国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python標(biāo)準(zhǔn)庫(kù)---18、文本處理服務(wù):string 常見的字符串操作

bbbbbb / 3243人閱讀

摘要:由在語言區(qū)域中被視為標(biāo)點(diǎn)符號(hào)的字符組成的字符串。給定作為見上文的返回值,將其轉(zhuǎn)換為要格式化的對(duì)象。選項(xiàng)表示對(duì)浮點(diǎn)表示類型和整數(shù)表示類型使用下劃線作為千位分隔符。

上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---17、內(nèi)置異常
下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---19、文本處理服務(wù):re正則表達(dá)式操作
字符串常量

此模塊中定義的常量為:

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ū)域中被視為標(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è)多帶帶的函數(shù),用于需要傳入一個(gè)預(yù)定義字母作為參數(shù),而不是使用 *args 和 **kwargs 語法將字典解包為多個(gè)多帶帶參數(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è)長(zhǎng)度為零的字符串。 如果沒有替換字段,則 field_name, format_spec 和 conversion 的值將為 None。

get_field(field_name, args, kwargs)

   給定 field_name 作為 parse() (見上文) 的返回值,將其轉(zhuǎn)換為要格式化的對(duì)象。 返回一個(gè)元組 (obj, used_key)。 默認(rèn)版本接受在 PEP 3101 所定義形式的字符串,例如 "0[name]" 或 "label.title"。 args 和 kwargs 與傳給 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 的 args 和 kwargs 的引用。 未使用參數(shù)的集合可以根據(jù)這些形參計(jì)算出來。 如果檢測(cè)失敗則 check_unused_args() 應(yīng)會(huì)引發(fā)一個(gè)異常。

format_field(value, format_spec)

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

convert_field(value, conversion)

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

格式字符串語法

str.format() 方法和 Formatter 類共享相同的格式字符串語法(雖然對(duì)于 Formatter 來說,其子類可以定義它們自己的格式字符串語法)。 具體語法與 格式化字符串字面值 相似,但也存在區(qū)別。

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

替換字段的語法如下:

    replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
    field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
    arg_name          ::=  [identifier | digit+]
    attribute_name    ::=  identifier
    element_index     ::=  digit+ | index_string
    index_string      ::=   +
    conversion        ::=  "r" | "s" | "a"
    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 可以省略。

一些簡(jiǎn)單的格式字符串示例

"First, thou shalt count to {0}"  # References first positional argument
"Bring me a {}"                   # Implicitly references the first positional argument
"From {} to {}"                   # Same as "From {0} to {1}"
"My quest is {name}"              # References keyword argument "name"
"Weight in tons {0.weight}"       # "weight" attribute of first positional arg
"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()。

幾個(gè)例子:

"Harold"s a clever {0!s}"        # Calls str() on the argument first
"Bring out the holy {name!r}"    # Calls repr() on the argument first
"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)生與對(duì)值調(diào)用 str() 相同的結(jié)果。 非空格式字符串通常會(huì)修改這一結(jié)果。

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

format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill            ::=  
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
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)的含義如下:

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

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

"#" 選項(xiàng)可以讓“替代形式”被用于轉(zhuǎn)換。 替代形式可針對(duì)不同類型分別定義。 此選項(xiàng)僅對(duì)整數(shù)、浮點(diǎn)、復(fù)數(shù)和 Decimal 類型有效。 對(duì)于整數(shù)類型,當(dāng)使用二進(jìn)制、八進(jìn)制或十六進(jìn)制輸出時(shí),此選項(xiàng)會(huì)為輸出值添加相應(yīng)的 "0b", "0o" 或 "0x" 前綴。 對(duì)于浮點(diǎn)數(shù)、復(fù)數(shù)和 Decimal 類型,替代形式會(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 類型為 "="。

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

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

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

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

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

浮點(diǎn)數(shù)和小數(shù)值可用的表示類型有:

格式示例

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

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

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

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

>>> "{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"

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

>>> "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"

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

>>> c = 3-5j
>>> ("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)"

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

>>> 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"

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

>>> "{:<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***********"

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

>>> "{:+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"

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

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

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

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

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

>>> 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"

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

>>> for align, text in zip("<^>", ["left", "center", "right"]):
...     "{0:{fill}{align}16}".format(text, fill=align, align=align)
...
"left<<<<<<<<<<<<"
"^^^^^center^^^^^"
">>>>>>>>>>>right"
>>>
>>> octets = [192, 168, 0, 1]
>>> "{:02X}{:02X}{:02X}{:02X}".format(*octets)
"C0A80001"
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12): 
...     for base in "dXob":
...         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
模板字符串

模板字符串提供了由 PEP 292 所描述的更簡(jiǎn)便的字符串替換方式。 模板字符串的一個(gè)主要用例是文本國(guó)際化 (i18n),因?yàn)樵诖藞?chǎng)景下,更簡(jiǎn)單的語法和功能使得文本翻譯過程比使用 Python 的其他內(nèi)置字符串格式化工具更為方便。 作為基于模板字符串構(gòu)建以實(shí)現(xiàn) i18n 的庫(kù)的一個(gè)示例,請(qǐng)參看 flufl.i18n 包。

模板字符串支持基于 $ 的替換,使用以下規(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í)給出 mapping 和 kwds 并且存在重復(fù)時(shí),則以 kwds 中的占位符為優(yōu)先。

safe_substitute(mapping, **kwds)

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

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

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

template

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

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

>>>

>>> from string import Template
>>> 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 11
>>> Template("$who likes $what").substitute(d)
Traceback (most recent call last):
...
KeyError: "what"
>>> Template("$who likes $what").safe_substitute(d)
"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*)。 如果給出了此屬性并且 braceidpattern 為 None 則此模式也將作用于帶花括號(hào)的占位符。

注解

由于默認(rèn)的 flags 為 re.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á)式的末尾。

輔助函數(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ì)被用來拆分和拼接單詞。
上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---17、內(nèi)置異常
下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---19、文本處理服務(wù):re正則表達(dá)式操作

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44076.html

相關(guān)文章

  • Python標(biāo)準(zhǔn)庫(kù)---17、內(nèi)置異常

    摘要:關(guān)聯(lián)值通常會(huì)作為參數(shù)被傳遞給異常類的構(gòu)造器。所有內(nèi)置異常的基類。此異常僅用于非限定名稱。由內(nèi)置函數(shù)和的方法所引發(fā),用來表示該迭代器不能產(chǎn)生下一項(xiàng)。當(dāng)一個(gè)或函數(shù)返回時(shí),將引發(fā)一個(gè)新的實(shí)例,函數(shù)返回的值將被用作異常構(gòu)造器的形參。 上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---16、內(nèi)置類型:上下文管理器類型、其他、特殊屬性下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---18、文本處理服務(wù):string 常見的字...

    mylxsw 評(píng)論0 收藏0
  • Python數(shù)據(jù)分析 - numpy

    摘要:前言以下簡(jiǎn)稱是數(shù)據(jù)分析必不可少的第三方庫(kù),的出現(xiàn)一定程度上解決了運(yùn)算性能不佳的問題,同時(shí)提供了更加精確的數(shù)據(jù)類型。因此,理解的數(shù)據(jù)類型對(duì)數(shù)據(jù)分析十分有幫助。一維數(shù)據(jù)由對(duì)等關(guān)系的有序或無序數(shù)據(jù)構(gòu)成,采用線性方式組織,可以用數(shù)組表示。 前言 NUMPY(以下簡(jiǎn)稱NP)是Python數(shù)據(jù)分析必不可少的第三方庫(kù),np的出現(xiàn)一定程度上解決了Python運(yùn)算性能不佳的問題,同時(shí)提供了更加精確的數(shù)據(jù)...

    CHENGKANG 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---17、爬蟲基本原理

    摘要:在前面我們講到了和的概念,我們向網(wǎng)站的服務(wù)器發(fā)送一個(gè),返回的的便是網(wǎng)頁(yè)源代碼。渲染頁(yè)面有時(shí)候我們?cè)谟没蜃ト【W(wǎng)頁(yè)時(shí),得到的源代碼實(shí)際和瀏覽器中看到的是不一樣的。所以使用基本請(qǐng)求庫(kù)得到的結(jié)果源代碼可能跟瀏覽器中的頁(yè)面源代碼不太一樣。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---16、Web網(wǎng)頁(yè)基礎(chǔ)下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---18、Session和Cookies 爬蟲,即網(wǎng)...

    hellowoody 評(píng)論0 收藏0
  • Python標(biāo)準(zhǔn)庫(kù)---19、文本處理服務(wù):re正則表達(dá)式操作

    摘要:正則表達(dá)式使用反斜杠來表示特殊形式,或者把特殊字符轉(zhuǎn)義成普通字符。解決辦法是對(duì)于正則表達(dá)式樣式使用的原始字符串表示法在帶有前綴的字符串字面值中,反斜杠不必做任何特殊處理。為了避免警告,需要將它們用反斜杠轉(zhuǎn)義。 上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---18、文本處理服務(wù):string 常見的字符串操作下一篇文章: 這個(gè)模塊提供了與 Perl 語言類似的正則表達(dá)式匹配操作。 模式和被搜索的字...

    jcc 評(píng)論0 收藏0
  • Python文本和字節(jié)序列

    摘要:計(jì)算機(jī)中以字節(jié)為單位存儲(chǔ)和解釋信息,規(guī)定一個(gè)字節(jié)由八個(gè)二進(jìn)制位構(gòu)成,即個(gè)字節(jié)等于個(gè)比特。需要注意協(xié)議規(guī)定網(wǎng)絡(luò)字節(jié)序?yàn)榇蠖俗止?jié)序。以元組形式返回全部分組截獲的字符串。返回指定的組截獲的子串在中的結(jié)束索引子串最后一個(gè)字符的索引。 導(dǎo)語:本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之?dāng)?shù)據(jù)結(jié)構(gòu)篇的重點(diǎn)知識(shí)及個(gè)人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。 本章重點(diǎn): 1、了解字符字節(jié)等概...

    AlphaWallet 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<