1. 程式人生 > >字串(的基本操作,格式化,方法)

字串(的基本操作,格式化,方法)

字串(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. 基本轉換符說明

  1. %字元:標記轉換說明符開始
  2. 轉換標誌(可選):- 表示對齊;+ 表示在轉換值之前加上正負號;""(空 白字元),表示正數之前保留空格;0 表示轉換值位數不夠時用 0 填充
  3. 最小欄位寬度(可選):轉換後的字串至少應該具有該值指定的寬度,如果是*,寬度會從元組值中讀取
  4. . 後跟精度值(可選):如果轉換的是實數,精度值表示小數點後顯示的位數;如果是字串,該數字表示最大欄位寬度;如果是*,精度會從元組值中讀取
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字元必須一一對應(長度相同)

使用此方法時的步驟可以理解為:

  1. 使用str.maketrans(intab,outtab)方法編輯需要更改的字元對映表,並儲存在某變數中
  2. 將得到的變數作為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優勢在於可同時進行多個替換