Python3的string庫模板的應用

2021-09-10 13:08:21 字數 3665 閱讀 7496

模板

字串模板將作為內建的拼接語法的替代用法。使用template拼接時,要在名字前加字首$來標識變數(例如,$var)。或者,如果有必要區分變數和周圍的文字,可以用大括號包圍變數(例如,$)。

import string

values =

t = string.template("""

variable : $var

escape : $$

variable in text: $iable

""")

print('template:', t.substitute(values))

s = """

variable : %(var)s

escape : %%

variable in text: %(var)siable

"""print('interpolation:', s % values)

s = """

variable :

escape : }

variable in text: iable

"""print('format:', s.format(**values))

___________________輸出____________________________

template:

variable : foo

escape : $

variable in text: fooiable

interpolation:

variable : foo

escape : %

variable in text: fooiable

format:

variable : foo

escape : {}

variable in text: fooiable

前兩種情況中,觸發字元($和%)要重複兩次來進行轉義。在格式化語法中,需要重複來進行轉義。模板與字串拼接或格式化的乙個關鍵區別是,它不考慮引數的型別。值會轉為字串,再將字串插入結果。這裡沒有提供格式化選項。例如,沒有辦法控制使用幾位有效數字來表示乙個浮點值。

通過safe_substitute()方法可以避免未能向模板提供所需的所有引數值可能產生的異常。

import string

values =

t = string.template('%var is here but %missing is not provided')

try:

print('substitute() :', t.substitute(values))

except keyerror as err:

print('error:', str(err))

print('safe_subtitute():', t.safe_substitute(values))

___________________輸出_________________________________

error :'missing'

safe_subtitute(): %var is here but %missing is not provided

由於字典中沒有missing的值,所以substitute()會產生乙個keyerror異常。safe_substitute()則不同,他不會丟擲這個錯誤,而是會捕獲這個錯誤並保留文字中的變數表示式。

高階模板:

可以調整string.template在模板體重查詢變數名所使用的正規表示式模式,以改變她的預設語法。修改delimiter和idpattern類屬性。

import string 

class mytemplate(string.template):

delimiter = '%'

idpattern = '[a-z]+_[a-z]+'

template_text = '''

delimiter : %%

replaced : %with_underscore

ignored : %notunderscored

'''d =

t = mytemplate(template_text)

print('modified id pattern')

print(t.safe_subtitute(d))

_______________________輸出__________________________

modified id pattern

delimiter : %

replaced : replaced

ignored : %notunderscored

在上面這個例子中替換規則已經通過正規表示式改變,定界符是%而不是$,而且變數名中間的某個位置必須包含乙個下劃線。模式%notunderscored不會被替換成任何字串,因為它不包含下劃線符號。

完成更加複雜的修改,可以覆蓋pattern屬性並定義乙個全新的正規表示式。所提供的模式必須包含4個命令組,分別捕獲轉義定界符、命名變數、加括號的變數名和不合法的定界符模式。

import string

t = string.template('$var')

print(t.pattern.pattern)

___________________輸出_____________________

\$(?:

(?p\$) | # escape sequence of two delimiters

(?p(?a:[_a-z][_a-z0-9]*)) | # delimiter and a python identifier

| # delimiter and a braced identifier

(?p) # other ill-formed delimiter exprs

)

t.pattern為乙個已經編譯正規表示式,不過可以通過它的pattern屬性得到原來的字串

建立乙個新模式的新的模板型別,這裡使用}作為變數語法

import re

import string

class mytemplate(string.template):

delimiter ='\}|

(?p[_a-z][_a-z0-9]*)\}\}|

(?p)

)'''

t = mytemplate('''

}''')

print('matches:', t.pattern.findall(t.template))

print('substituted:',t.safe_substitute(var='replacement'))

_________________________輸出___________________________________

matches: [('{{', '', '', ''), ('', 'var', '', '')]

substituted:

{{replacement

python3 中 byte 和string轉換

python3 中 byte 和string轉換 舉例,我要將byte轉換為string型別 一開始我是直接使用 a str b 但是發現結果並非我想要的那種,後來在網上發現了一篇寫的很好的文章 python 3中最重要的新特性可能就是將文字 text 和二進位制資料做了更清晰的區分。文字總是用un...

python3基礎語法 對String基本操作

1.拼接 包含字串拼接數字 1 使用 作為字串的拼接運算子 2 字串與數字進行拼接時,需要將數字轉換成字串 使用 str 或 repr 函式 str1 這是 str2 funny p 99.8 print str1 str2 結果為 這是 funny print str1 str p 使用str 將...

Kaldi的Python3庫附加

為了更為方便觀察kaldi整個訓練過程,需要將kaldi寫的python3庫附加到python3的系統庫中,方便定為和除錯。該目錄下的python檔案均是kaldi訓練chain和nnet3訓練模型的主程式,通過這些python程式,帶上合適引數,去呼叫shell的命令列 說是python,其實裡面...