1. 程式人生 > >[Python]第三章 使用字串

[Python]第三章 使用字串

文章目錄

3.1字串基本操作

字串也是序列,因此通用的序列操作都可以實現(索引、切片、相加、乘法、成員資格)

>>> a='congratulations'
>>> a[9:-1]
'ation'
>>> 'congratulations'[5]
'a'
>>> 'congratulations'[8:]
'lations'
>>> 'congratu'+'lations'
'congratulations'
>>> 'ha'+2*'p'+'y' 'happy' >>> 'on' in 'congrutulations' True

但是字串是不可變,因此不可以切片複製或者元素賦值

>>> ‘happy’[1]=’k’    #報錯
>>> ‘happy’[:2]=’kk’   #報錯

3.2設定字串的格式:精簡版

方式一: ‘…%s…’ % values
%s稱為轉換說明符,指出了要將值插入什麼地方

>>> format = "Hello, %s. %s enough for ya?"
>>> values = ('world', 'Hot')
>>> format % values
'Hello, world. Hot enough for ya?'

如果指定的值不是字串,使用str將其轉換為字串。

>>> format="Hello,%s.%s is you teacher"
>>> val=('kk',12)
>>> format%val
'Hello,kk.12 is you teacher'

%.3f將值的格式設定為包含3位小數的浮點數。

>>> form=('score:%.3f')
>>> vaa=44.36977
>>> form%vaa
'score:44.370'

方式二:template(…$key…).substitute(key=value)
模板字串,包含等號的引數稱為關鍵字引數,可將關鍵字引數視為一種向命名替換欄位提供值的方式。

>>> from string import Template
>>> tmpl = Template("Hello, $who! $what enough for ya?")
>>> tmpl.substitute(who="Mars", what="Dusty")
'Hello, Mars! Dusty enough for ya?'

方式三:S{ /index /key}.format(values /key=value)
使用字串方法.format( ),

>>> "{}, {} and {}".format("first", "second", 3)
'first, second and 3'

被替換欄位花括號指定format裡面的索引

>>> "{2}, {0} and {1}".format("second", 3,"first")
'first, second and 3'

關鍵字引數的排列順序無關緊要

>>> from math import pi
>>> "{name} is approximately {value:.2f}.".format(value=pi, name="π")
'π is approximately 3.14.'

Notice: 說明符.2f,並使用冒號將其與欄位名隔開。它意味著要使用包含2位小數的浮點數格式

>>> from math import pi
>>> "{name} is approximately {pi}.".format(pi=pi, name="π")
'π is approximately 3.14.'

方式四:f’…{e}…’
如果變數與替換欄位同名, 在字串前面加上f

>>> from math import pi
>>>f"π is approximately {pi}."
'π is approximately 3.14141592653589793.'

但如果還有其他引數值未被定義,則不能既新增f,又用format()方法

>>> from math import pi
>>>f"{name} is approximately {pi}.".format(name="π")
報錯:name ‘name’ is not defined

3.3 設定字串的格式:完整版

3.3.1 替換欄位名

“{ /index /key}”.format(values /key=value)

>>> "{foo} {} {bar} {}".format(1, 2, bar=4, foo=3)
'3 1 4 2'
>>> "{foo} {1} {bar} {0}".format(1, 2, bar=4, foo=3)
'3 2 4 1'

Notice:如果format()裡面既有值,又有鍵值對,把值放在鍵值對後面會報錯
關鍵字引數必須跟隨在位置引數後面!

>>> "{foo} {} {bar} {}".format(bar=4, foo=31, 2)
報錯,bar=4, foo=3應該在1,2後面

不能同時使用手工編號和自動編號
如果format裡面的序列已經指定名稱,則使用的索引編號也要帶名稱

>>> fullname = ["Alfred", "Smoketoomuch"]
>>> "Mr {name[1]}".format(name=fullname)
'Mr Smoketoomuch'

>>>"Mr {fullname[1]}".format(fullname)
報錯

使用句點表示法來訪問匯入的模組中的方法、屬性、變數和函式

>>> import math
>>> tmpl = "The {mod.__name__} module defines the value {mod.pi} for π"
>>> tmpl.format(mod=math)
'The math module defines the value 3.141592653589793 for π'

3.3.2 基本轉換

指定要在欄位中包含的值後,就可新增有關如何設定其格式的指令了

>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
π 'π' '\u03c0'

上述三個標誌(s、r和a)指定分別使用str、repr和ascii進行轉換。
字串格式設定中的型別說明符

型別 含 義
b 將整數表示為二進位制數
c 將整數解讀為Unicode碼點
d 將整數視為十進位制數進行處理,這是整數預設使用的說明符
e 使用科學表示法來表示小數(用e來表示指數)
E 與e相同,但使用E來表示指數
f 將小數表示為定點數(預設6位小數)
F 與f相同,但對於特殊值(nan和inf),使用大寫表示
g 自動在定點表示法和科學表示法之間做出選擇。這是預設用於小數的說明符,但在預設情況下至少有1位小數
G 與g相同,但使用大寫來表示指數和特殊值
n 與g相同,但插入隨區域而異的數字分隔符
o 將整數表示為八進位制數
s 保持字串的格式不變,這是預設用於字串的說明符
x 將整數表示為十六進位制數並使用小寫字母
X 與x相同,但使用大寫字母
% 將數表示為百分比值(乘以100,按說明符f設定格式,再在後面加上%)

3.3.3 寬度、精度和千位分隔符

寬度 :n

>>> "{num:10}".format(num=3)
'         3'
>>> "{name:10}".format(name="Bob")
'Bob       '

精度 :.nf

>>> "Pi day is {pi:.2f}".format(pi=pi)
'Pi day is 3.14'

同時指定寬度和精度(數字) :n.nf

>>> "{pi:10.2f}".format(pi=pi)
'      3.14'

同時指定寬度和精度(其他) :n.n

>>> "{:.5}".format("Guido van Rossum")
'Guido'

可使用逗號來指出你要新增千位分隔符。

>>>"{:,}".format(10000000000000)
'10,000,000,000,000'
同時指定寬度、分隔符、精度
>>>"{:30,.3f}".format(10000000000000)
'        10,000,000,000,000.000'

3.3.4 符號、對齊和用0 填充

在指定寬度和精度的數前面,可新增一個標誌。這個標誌可以是零、加號、減號或空格,其中零表示使用0來填充數字。

>>>'{:010.2f}'.format(2.3659)
'0000002.37'

要指定左對齊、右對齊和居中,可分別使用<、>和^

>>>'{:<10.2f}'.format(2.3659)
'2.37      '
>>>'{:^10.2f}'.format(2.3659)
'   2.37   '
>>>'{:>10.2f}'.format(2.3659)
'      2.37'

可以使用填充字元來擴充對齊說明符
Notice:如果以非空格填充,對齊符號不能缺

>>>'{:*^15.2f}'.format(2.3659)
'*****2.37******'

新增符號

'{:.2f} and {:.2f}'.format(3.1415,-3.1415)
'3.14 and -3.14'

>>> print('{0:-.2}\n{1:-.2}'.format(pi, -pi)) #預設設定
3.1
-3.1
>>> print('{0:+.2}\n{1:+.2}'.format(pi, -pi))
+3.1
-3.1

井號(#)在符號說明符和寬度之間,這個選項將觸發另一種轉換方式,轉換細節隨型別而異

>>> "{:#b}".format(42)
'0b101010'
>>> "{:#g}".format(42)
'42.0000'

CASE 列印價格單
知識點1:header_fmt和fmt
如果要列印花括號,需要在外側再加上一對花括號
‘{{:{}}}’.format(25)
‘{:25}’

知識點2:
在這裡插入圖片描述在這裡插入圖片描述

3.4字串方法—— .方法名()

字串很多方法繼承自String模組
 string.digits:包含數字0~9的字串。
 string.ascii_letters:包含所有ASCII字母(大寫和小寫)的字串。
 string.ascii_lowercase:包含所有小寫ASCII字母的字串。
 string.printable:包含所有可列印的ASCII字元的字串。
 string.punctuation:包含所有ASCII標點字元的字串。
 string.ascii_uppercase:包含所有大寫ASCII字母的字串。

3.4.1 center(n,X)——通過在兩邊新增填充n字元X(預設為空格)讓字串居中。

>>> "The Middle by Jimmy Eat World".center(39)
'       The Middle by Jimmy Eat World       '
>>> "The Middle by Jimmy Eat World".center(39, "*")
'*****The Middle by Jimmy Eat World*****'

Notice:空格數或者填充符數=(n-字元數),且左邊(n-字元數)//2,右邊= 左邊+(n-字元數)%2

3.4.2 find(X,n1,n2)——在字串中查詢子串X從起始位置n1到終點位置n2(不含)出現的位置索引,沒找到返回-1

>>> 'congrutulations'.find('on')
1
>>> 'congrutulations'.find('on',5,14)
12
>>> 'congrutulations'.find('d‘’)
-1

該方法可以實現成員資格的功能,只是返回的是索引位置,不是布林值

3.4.3 join——合併序列的元素 x.join(S) 用拼接符x將序列S裡面的元素拼接起來

所合併序列的元素必須都是字串

>>>sq=[1,2,3,4]
>>>ss='+'
>>>ss.join(sq)
報錯
>>>sq=['1','2','3','4']    #  列表
>>>ss='+'
>>>ss.join(sq)
'1+2+3+4'
>>>dd='d','f','t','r'       # 元組
>>>''.join(dd)
'dftr'
>>>dd='d','f','t','r'
>>>'/'.join(dd)
'd/f/t/r'

拼接符和序列的位置也不能置換

>>>sq=['1','2','3','4']
>>>ss='+'
>>>sq.join(ss)
報錯

Notice:相反函式split

3.4.4 lower()——返回字串的小寫版本。

>>> 'Trondheim Hammer Dance'.lower()
'trondheim hammer dance'

>>>if 'Gumby' in ['gumby','jack','anny']:
>>>    print('found it!')
>>>else:
>>>    print('not found!')not found’

>>>if 'Gumby' .lower() in ['gumby','jack','anny']:
>>>    print('found it!')
>>>else:
>>>    print('not found!')
‘found it’

Notice:相反函式upper

3.4.5 replace(old_text,new_text)——將指定子串都替換為另一個字串

>>>'to be or not to be'.replace('be','kk')
'to kk or not to kk'

3.4.6 split()——將字串拆分為序列 S.split(x)以符號x拆分字串S

>>>'1:2:3:4:5:6'.split(':')
['1', '2', '3', '4', '5', '6']

如果沒有指定分隔符,將預設在單個或多個連續的空白字元(空格、製表符、換行符等)處進行拆分。

>>>'to be or not to be'.split()
['to', 'be', 'or', 'not', 'to', 'be']

3.4.7 srip(x)——將字串開頭和末尾的空白/特定字元x(但不包括中間的空白)刪除,並返回刪除後的結果。

>>>'  he is a good boy  '.strip()
'he is a good boy'

>>>if 'gumby ' in ['gumby','jack','anny']:
>>>    print('found it!')
>>>else:
>>>    print('not found!')
not found!

>>>if 'gumby  '.strip() in ['gumby','jack','anny']:
>>>    print('found it!')
>>>else:
>>>    print('not found!')
found it!

刪除頭尾部特定字元

>>>'*!*he*is a good boy***!'.strip('*')
'!*he*is a good boy***!'

刪除頭尾部多種特定字元只要將字元寫在同一個‘ ’下面即可

>>>'*!*he*is a good boy***!'.strip('*!')
'he*is a good boy'

3.4.8 translate(table)——用新建好的轉換表table進行單字元替換,同時替換多個字元

首先呼叫maketrans方法建立一個轉換表

>>>table= str.maketrans('cs','kz')   #將所有的c和s分別轉為k和z
>>>table
{99: 107, 115: 122}                #Unicode碼點之間的對映c:k,s:z。
>>>'this is an incredible table'.translate(table)
'thiz iz an inkredible table'

3.4.9 判斷字串是否滿足特定條件

判斷字串是否具有特定的性質的方法,很多以is開頭,如:
Isspace 包含的字元全為空白
Isdigit 包含的字元全為數字
isupper包含的字元全為大寫 等
滿足返回True