[雪峰磁針石部落格]python標準模組介紹-string:文字常量和模板
string—文字常量和模板
作用:包含處理文字的常量和類。
Python版本:1.4及以後版本
最早的Python版本就有string模組。 之前在這個模組中實現的許多函式已經移至str物件的方法。 string模組保留了幾個有用的常量和類,用於處理str物件。
函式
capwords()的將字串中所有單詞的首字母大寫。
#!python
>>> import string
>>> t = "hello world!"
>>> string.capwords(t)
`Hello World!`
>>> t
`hello world!`
>>> t.capitalize()
`Hello world!`
>>> t
`hello world!`
結果等同於先呼叫split(),把結果列表中各個單詞的首字母大寫,然後呼叫join()合併結果。
因為str物件已經有capitalize()方法,該函式的實際意義並不大。
模板
字串模板已經作為PEP 292的一部分增加到Python 2.4中,並得到擴充套件,以替代內建拼接(interpolation)語法類似。使用string.Template拼接時,可以在變數名前面加上字首$(如$var)來標識變數,如果需要與兩側的文字相區分,還可以用大括號將變數括起(如${var})。
下面的例子對簡單的模板和使用%操作符及str.format()進行了比較。
#!python
import string
values = {`var`: `foo`}
t = string.Template("""
Variable : $var
Escape : $$
Variable in text: ${var}iable
""")
print(`TEMPLATE:`, t.substitute(values))
s = """
Variable : %(var)s
Escape : %%
Variable in text: %(var)siable
"""
print(`INTERPOLATION:`, s % values)
s = """
Variable : {var}
Escape : {{}}
Variable in text: {var}iable
"""
print(`FORMAT:`, s.format(**values))
"""
print `INTERPOLATION:`, s % values
執行結果:
#!python
python3 string_template.py
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()方法,可以避免未能提供模板所需全部引數值時可能產生的異常。
tring_template_missing.py
#!python
import string
values = {`var`: `foo`}
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_substitute():`, t.safe_substitute(values))
由於values字典中沒有對應missing的值,因此substitute()會產生KeyError。不過,safe_substitute()不會丟擲這個錯誤,它將捕獲這個異常,並在文字中保留變數表示式。
#!python
$ python3 string_template_missing.py
ERROR: `missing`
safe_substitute(): foo is here but $missing is not provided
高階模板(非常用)
可以修改string.Template的預設語法,為此要調整它在模板體中查詢變數名所使用的正規表示式模式。簡單的做法是修改delimiter和idpattern類屬性。
string_template_advanced.py
#!python
import string
class MyTemplate(string.Template):
delimiter = `%`
idpattern = `[a-z]+_[a-z]+`
template_text = ```
Delimiter : %%
Replaced : %with_underscore
Ignored : %notunderscored
```
d = {
`with_underscore`: `replaced`,
`notunderscored`: `not replaced`,
}
t = MyTemplate(template_text)
print(`Modified ID pattern:`)
print(t.safe_substitute(d))
執行結果:
#!python
$ python3 string_template_advanced.py
Modified ID pattern:
Delimiter : %
Replaced : replaced
Ignored : %notunderscored
預設模式
#!python
>>> import string
>>> t = string.Template(`$var`)
>>> print(t.pattern.pattern)
$(?:
(?P<escaped>$) | # Escape sequence of two delimiters
(?P<named>(?-i:[_a-zA-Z][_a-zA-Z0-9]*)) | # delimiter and a Python identifier
{(?P<braced>(?-i:[_a-zA-Z][_a-zA-Z0-9]*))} | # delimiter and a braced identifier
(?P<invalid>) # Other ill-formed delimiter exprs
)
string_template_newsyntax.py
#!python
import re
import string
class MyTemplate(string.Template):
delimiter = `{{`
pattern = r```
{{(?:
(?P<escaped>{{)|
(?P<named>[_a-z][_a-z0-9]*)}}|
(?P<braced>[_a-z][_a-z0-9]*)}}|
(?P<invalid>)
)
```
t = MyTemplate(```
{{{{
{{var}}
```)
print(`MATCHES:`, t.pattern.findall(t.template))
print(`SUBSTITUTED:`, t.safe_substitute(var=`replacement`))
執行結果:
#!python
$ python3 string_template_newsyntax.py
MATCHES: [(`{{`, ``, ``, ``), (``, `var`, ``, ``)]
SUBSTITUTED:
{{
replacement
格式化
Formatter類實現與str.format()類似。 其功能包括型別轉換,對齊,屬性和欄位引用,命名和位置模板引數以及特定型別的格式選項。 大多數情況下,fformat()方法是這些功能的更方便的介面,但是Formatter是作為父類,用於需要變化的情況。
常量
string模組包含許多與ASCII和數字字符集有關的常量。
string_constants.py
#!python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: xurongzhong#126.com wechat:pythontesting qq:37391319
# 技術支援 釘釘群:21745728(可以加釘釘pythontesting邀請加入)
# qq群:144081101 591302926 567351477
# CreateDate: 2018-6-12
import inspect
import string
def is_str(value):
return isinstance(value, str)
for name, value in inspect.getmembers(string, is_str):
if name.startswith(`_`):
continue
print(`%s=%r
` % (name, value))
執行結果
#!python
$ python3 string_constants.py
ascii_letters=`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`
ascii_lowercase=`abcdefghijklmnopqrstuvwxyz`
ascii_uppercase=`ABCDEFGHIJKLMNOPQRSTUVWXYZ`
digits=`0123456789`
hexdigits=`0123456789abcdefABCDEF`
octdigits=`01234567`
printable=`0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&`()*+,-./:;<=>?@[\]^_`{|}~
x0bx0c`
punctuation=`!"#$%&`()*+,-./:;<=>?@[\]^_`{|}~`
whitespace=`
x0bx0c`
參考資料
- 本文最新版本地址
- 本文涉及的python測試開發庫 謝謝點贊!
- 本文相關海量書籍下載
- 討論 釘釘免費群21745728 qq群144081101 567351477
- Standard library documentation for string
-
String Methods – Methods of
str
objects that replace the deprecated functions instring
. - PEP 292 – Simpler String Substitutions
-
Format String Syntax – The formal definition of the layout specification language used by
Formatter
andstr.format()
.
相關文章
- [雪峰磁針石部落格]python應用效能監控工具簡介Python
- [雪峰磁針石部落格]2018最佳python編輯器和IDEPythonIDE
- [雪峰磁針石部落格]python庫介紹-argparse:命令列選項及引數解析Python命令列
- [雪峰磁針石部落格]python計算機視覺深度學習1簡介Python計算機視覺深度學習
- [雪峰磁針石部落格]介面測試面試題面試題
- [雪峰磁針石部落格]tesseractOCR識別工具及pytesseract
- [雪峰磁針石部落格]python包管理工具:Conda和pip比較Python
- [雪峰磁針石部落格]可愛的python測試開發庫Python
- [雪峰磁針石部落格]multi-mechanize效能測試工具
- [雪峰磁針石部落格]2019-Python最佳資料科學工具庫Python資料科學
- [雪峰磁針石部落格]python爬蟲cookbook1爬蟲入門Python爬蟲
- [雪峰磁針石部落格]資料倉儲快速入門教程1簡介
- [雪峰磁針石部落格]滲透測試簡介1滲透測試簡介
- [雪峰磁針石部落格]2018最佳ssh免費登陸工具
- [雪峰磁針石部落格]pythontkinter圖形工具樣式作業Python
- [雪峰磁針石部落格]flask構建自動化測試平臺3-模板Flask
- [雪峰磁針石部落格]使用python3和flask構建RESTfulAPI(介面測試服務)PythonFlaskRESTAPI
- [雪峰磁針石部落格]pythonGUI工具書籍下載-持續更新PythonNGUI
- [雪峰磁針石部落格]python計算機視覺深度學習2影像基礎Python計算機視覺深度學習
- [雪峰磁針石部落格]大資料Hadoop工具python教程9-Luigi工作流大資料HadoopPythonUI
- [雪峰磁針石部落格]使用jython進行dubbo介面及ngrinder效能測試
- [雪峰磁針石部落格]軟體自動化測試初學者忠告
- [雪峰磁針石部落格]Bokeh資料視覺化工具1快速入門視覺化
- [雪峰磁針石部落格]pythonGUI作業:tkinter控制元件改變背景色PythonNGUI控制元件
- [雪峰磁針石部落格]python人工智慧作業:Windows使用SAPI和tkinter用不到40行實現文字轉語音工具Python人工智慧WindowsAPI
- [雪峰磁針石部落格]python網路作業:使用python的socket庫實現ICMP協議的pingPython協議
- [雪峰磁針石部落格]flask構建自動化測試平臺1-helloFlask
- [雪峰磁針石部落格]web開發工具flask中文英文書籍下載-持續更新WebFlask
- [雪峰磁針石部落格]軟體測試專家工具包1web測試Web
- [雪峰磁針石部落格]資料分析工具pandas快速入門教程4-資料匯聚
- [雪峰磁針石部落格]flask構建自動化測試平臺7-新增google地圖FlaskGo地圖
- [雪峰磁針石部落格]selenium自動化測試工具python筆試面試專案實戰5鍵盤操作Python筆試面試
- [雪峰磁針石部落格]pythonopencv3例項(物件識別和擴增實境)1-影像幾何轉換PythonOpenCV物件
- [雪峰磁針石部落格]python3.7極速入門教程1安裝:Linux(Ubuntu18.04)及Windows上安裝AnacondaPythonLinuxUbuntuWindows
- [雪峰磁針石部落格]計算機視覺opcencv工具深度學習快速實戰1人臉識別計算機視覺深度學習
- [雪峰磁針石部落格]Python經典面試題:用3種方法實現堆疊和佇列並示例實際應用場景Python面試題佇列
- [雪峰磁針石部落格]計算機視覺opcencv工具深度學習快速實戰2opencv快速入門計算機視覺深度學習OpenCV
- Python的常見模組:OS和 time模組介紹Python