字串(的基本操作,格式化,方法)
字串(string)
只要在一對單引號或者雙引號(甚至三引號)之間的值,叫做字串
’任何在這對引號’
"或者雙引號"
"‘甚至三引號之間的內容’"
就是字串(str)
字串的基本操作
所有標準序列的操作:索引,分片,成員資格,求長度,最大值,最小值對字元串同樣適用,但字串是不可變的(str型別的檔案不支援更改),所以無法進行分片賦值
轉義字元 | 描述 | 轉義字元 | 描述 |
---|---|---|---|
\ (在行尾時) | 續行符 | \n | 換行 |
\ ’ | 單引號 | \r | 回車 |
諸如此類,稱之為字串轉義字元(部分)
print('hello,word\nPython')
>>>hello, word
Python
print('\'精誠所至\'\n\'金石為開\'')
>>>'精誠所至'
'金石為開'
字串格式化
1. 字串格式化符號
符號 | 描述 | 符號 | 描述 |
---|---|---|---|
%s | 格式化字串 | %d | 格式化整數 |
%f | 格式化浮點數 | %% | (在其他格式化符號之後)結果中顯示%這個符號 |
字串的格式化有很多方式,通常用 “ % ”表示
print('hello,%s'% 'world') # 用%s作為'world'的佔位符
>>> hello,world
print('he\'s %d years old'% 10) # 用%d作為 10 的佔位符
>>> he's 10 years old
print('本季度的收入利潤相比上季度增長了:%.2f%%' % 1.23)
>>> 本季度的收入利潤相比上季度增長了:1.23%
- %s的部分稱為轉換說明符,標記了需要放置轉換值得位置,通用術語即佔位符
- s表示佔位符右邊的值會被格式化為字串(s:string)
- %f 可指定精度(預設輸出保留6位小數),%.2f 表示保留兩位小數
2. 字串格式化元組
格式化操作符的右運算元可以使是任何元素,如果是元組或其他對映型別(如dict),那麼字串的格式將有所不同:如果右運算元石元組,其中的每個元素都會被單獨格式化,每個值都需要單獨的轉換符說明
print('中國女排奪得了%s屆奧運會%s,中國共獲得%s枚金牌'%('2018','冠軍','26'))
>>> 中國女排奪得了2018屆奧運會冠軍,中國共獲得26枚金牌
只有元組(tuple)和字典(dict)可以初始化一個以上的值
3. 基本轉換符說明
- %字元:標記轉換說明符開始
- 轉換標誌(可選):- 表示對齊;+ 表示在轉換值之前加上正負號;""(空 白字元),表示正數之前保留空格;0 表示轉換值位數不夠時用 0 填充
- 最小欄位寬度(可選):轉換後的字串至少應該具有該值指定的寬度,如果是*,寬度會從元組值中讀取
- . 後跟精度值(可選):如果轉換的是實數,精度值表示小數點後顯示的位數;如果是字串,該數字表示最大欄位寬度;如果是*,精度會從元組值中讀取
print('圓周率PI的值為:%f' % 3.14159) # 在沒有給%f限定精度的情況下預設保留6位小數
>>>圓周率PI的值為:3.141590
print('圓周率PI的值為:%.3f' % 3.14159) # 限定保留三位小數
>>>圓周率PI的值為:3.142
print('圓周率PI的值為:%10.3f' % 3.14159) # 輸出字串的最小欄位寬度為10,保留三位小數
>>>圓周率PI的值為: 3.142
print('圓周率PI的值為:%.5s' % 'hello world') # 輸出字串的最寬度為5
>>>圓周率PI的值為:hello
print('圓周率PI的值為:%*.*s' % (10,5,'hello world')) # 欄位最小寬度在元組內提取,保留小數位在元組內提取,輸出字串的最寬度為5
>>>圓周率PI的值為: hello
print('圓周率PI的值為:%010f' % 3.14159) # 空位用0填充,輸出字串的最小欄位寬度為10
>>>圓周率PI的值為:003.141590
print('圓周率PI的值為:%-10.3f' % 3.14159) # 左對齊,輸出字串的最小欄位寬度為10,保留三位小數
>>>圓周率PI的值為:3.142
print('圓周率PI的值為:% .3f' % 3.14159) # 在正數結果前加上空格,保留三位小數
>>>圓周率PI的值為: 3.142
print('圓周率PI的值為:%+.3f' % 3.14159) # 在數值前標註正負,保留三位小數
>>>圓周率PI的值為:+3.142
函式類初始化方法
在Python3.6之後引入了一個新的字串: f-strings ,相當於之前的 .format()
val_str = 'python'
print(f'welcome to {val_str} ')
>>>welcome to python
import decimal
width = 10
precision = 4
value = decimal.Decimal('12.34567')
print(f'result: {value:{width}.{precision}}') # 替換value,最小字元寬度width,精確4位數
>>>result: 12.35
字串的方法
find()
str.find(str,beg == 0,end == (string)) 用於檢測字串中是否包含子字串,如果包含開始和結束範圍,就在範圍內檢索。返回結果為子字串所在位置最左端索引,如果沒有找到,返回-1
field = 'do it now'
print(field.find('it'))
>>>3
print(field.find('python'))
>>>-1
print(field.find('it',2)) # 提供起點
>>>3
print(field.find('it',5)) # 提供起點
>>>-1
print(field.find('it',0,3)) # 提供起點,終點
>>>-1
print(field.find('it',0,5))
>>>3
print(field.find('it',4,10))
>>>-1
join()
str.join(sequence) 用於將序列中的元素以指定字元為分隔符連線成一個新的字串;str代表指定檢索的字串,sequence表示要連線的元素序列 進行join操作時,呼叫和被呼叫的物件都必須是字串
n = ['1','a','d','5','p']
print(' '.join(n)) #用空格作為列表n的分隔符進行連線,組成新的字串
>>>1 a d 5 p
lower(),upper()
str.lower() / str.upper() 用於將字串中的所有大寫字元轉換為小寫 / 大寫,此方法不需要傳入引數
o = 'do it now'
print(o.upper()) # 將變數o所對應的字串全部大寫
>>>DO IT NOW
print(o.upper().find('nOW'.upper())) # 使用upper方法後轉換為大寫查詢
>>>6
上述兩種方法在處理某些語言,如中文,挪威文時,效果可能並不太好
swapcase()
str.swapcase() 用於對字串的大小寫字母進行轉換,即大小寫顛倒
replace()
str.replace(old,new,max) 用於把字串中的舊字串(old),替換為新的字串(new),如果指定第三個引數,替換次數就不超過max次
your_number = '12345678912'
hiding_number = your_number.replace(your_number[:7],'*' * 7) # 替換號碼得前七位,用 * 替代
print(hiding_number)
>>>*******8912
print(your_number.replace('2','v',2)) # 用v替換2,替換兩次
>>>1v34567891v
當不指定第三個引數時,所有匹配字元都會替換;指定後,從左至右替換,替換次數不會超過指定次數
split()
str.split(st=’’,num=string.count(str)) 通過指定分隔符對字串盡情切片,如果引數num有指定值,就分隔成有num+1個,以子字串為元素的列表 st代表分隔符,預設為空格;num代表分割次數,若不指定次數,所有的匹配字元都會被分割 是join的逆方法,用來將字串分割成序列
o = 'do it now'
print(o.split('o'))
>>>['d', ' it n', 'w']
print(o.split('o',1))
>>>['d', ' it now']
strip()
str.strip(chars) 用於移除字串首尾指定的字元(預設為空格),char代表被指定的頭尾字元
o = '====do ==it== now=='
print(o.strip('='))
>>>do ==it== now
例題:現有字串’wubwewubarewubthewubchampianwubmywubfriendwub!wub’ 將字串中所有的’wub’用空格替換,組成一個新的字串,且頭尾不能有空格
w = 'wubwewubarewubthewubchampainwubmywubfriendwub!wub'
n = w.split('wub') #將字串以'wub'為分隔符分割,得到列表 [' ','we','are','the','champian','my','friend','!',' ']
m = ' '.join(n) # 以空格為連線符,將列表n重新連線組成新的字串' we are the champian my friend ! '
print(m.strip(' ')) #去掉頭尾' ',組成新的字串
>>>we are the champian my friend !
translate() & maketrans()
-
str.translate(table[,deletechars]) 次方法根據引數table給出的表(包含256個字元)轉換字串的字元,將要過濾的字元放到del引數中此方法根據引數table給出的表(包含256個字元)轉換字串的字元,將要過濾的字元放到del引數中
-
str.maketrans(intab,outtab) 此方法則是編輯替換內容(table),指定原本在字串(str)中的部分字元為intab,通過一一對映的方式將這字元轉換為outtab intab與outtab字元必須一一對應(長度相同)
使用此方法時的步驟可以理解為:
- 使用str.maketrans(intab,outtab)方法編輯需要更改的字元對映表,並儲存在某變數中
- 將得到的變數作為translate方法中的table引數對字串進行對映
n = 'Once upon a time...'
m = n.maketrans('eio','123') # 寫法等同於 n.translate(n.maketrans('eio','123'))
print(n.translate(m)) # 傳入的變數 m,就是 translate 方法中的 table 引數
>>>Onc1 up3n a t2m1...
translate方法跟replace類似,可以替換字串中某些部分; 不同的是:translate只處理單個字元,相比replace優勢在於可同時進行多個替換