模板
字串模板將作為內建的拼接語法的替代用法。使用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,其實裡面...